从 firebase 数据库中获取最高分值
Getting highest score values from firebase database
在我的网站上有一些我从 firebase 获得的电影。电影的分数在0到100之间。我已经在我的网站上找到了所有的电影。我还想按降序显示它们。(例如评分最高的 5 部电影)我怎样才能做到这一点?感谢您的回答。
const app = initializeApp(firebaseConfig);
const db = getDatabase(app);
const auth = getAuth(app);
const firebaseRef= ref(getDatabase());
var body = document.getElementById('movies');
var body2 = document.getElementById('series');
function AddItemsToTable(name, score, img, id) {
var movies = `<div class="content"><a href="movieDetail.html?movieId=${id}"><img src="${img}" ></a><p><a href="movieDetail.html?movieId=${id}">${name}</a></p> <p> <i class="fa fa-star checked" id="star${id}"></i> <a class="scoretxt">${score}%</a> </p> </div>`;
body.innerHTML+=movies;
}
function AddItemsToTable2(name, score, img, id) {
var series = `<div class="content"><a href="seriesDetail.html?seriesId=${id}"><img src="${img}" ></a><p><a href="seriesDetail.html?seriesId=${id}">${name}</a></p> <p> <i class="fa fa-star checked" id="star2${id}"></i> <a class="scoretxt">${score}%</a> </p> </div>`;
body2.innerHTML += series;
}
//*******************************I got the movies************************************************
function AddAllItemsToTable(TheMovies){
var counter=0;
TheMovies.forEach(element => {
if (counter===6) {
return;
}
AddItemsToTable(element.movieName, element.movieScore, element.movieImage, element.movieId);
counter++;
});
}
//************************I got tv series*********************************************
function AddAllItemsToTable2(TheSeries){
var counter=0;
TheSeries.forEach(element => {
if (counter===6) {
return;
}
AddItemsToTable2(element.seriesName, element.seriesScore, element.seriesImage, element.seriesId);
counter++;
});
}
function AddAllItemsToTable3(TheMovies){
var counter=0;
TheMovies.forEach(element => {
if (counter===6) {
return;
}
AddItemsToTable3(element.movieName, element.movieScore, element.movieImage, element.movieId);
counter++;
});
}
function getAllDataOnce(){
const dbRef=ref(db);
get(child(dbRef,"Movies"))
.then((snapshot)=>{
var movies=[];
snapshot.forEach(childSnapshot => {
movies.push(childSnapshot.val())
});
AddAllItemsToTable(movies);
});
}
function getAllDataOnce2(){
const dbRef=ref(db);
get(child(dbRef,"Series"))
.then((snapshot)=>{
var series=[];
snapshot.forEach(childSnapshot => {
series.push(childSnapshot.val())
});
AddAllItemsToTable2(series);
});
}
window.onload = (event) => {
getAllDataOnce();
getAllDataOnce2();
};
<div class="grid-container">
<header class="header">
<div class="solheader">
<a href="main.html" style="logo" class="big"> <img src="img/sonlogo3.png" alt="logo"></a>
<a href="main.html" style="logo" class="small"> <img src="img/logosmall.png" alt="logo" style="width:60px;height:48px;margin:5px;"></a>
</div>
<div class="ortaheader">
<input type="text" placeholder="Movies or TV series.." class="searchbox"><i class="fa fa-search arama"></i> </input>
<ul>
<li class="categories"><a href="#">Categories <i class="fa fa-caret-down" style="font-size:16px;"> </i></a>
<ul class="dropdown">
<li><a href="series.html">TV Series</a></li>
<li><a href="movies.html">Movies</a></li>
</ul>
</li>
</ul>
</div>
<div class="menu sagheader">
<ul>
<li>
<button class="ikon dropdown-toggle" type="button" data-toggle="dropdown"><i class="far fa-user"></i> </button>
<ul class="dropdown-menu">
<li class="accountname"><b><script>document.write(document.cookie.substring(5))</script></b></li>
<li class="login"><a href="login.html" style="color:red;"><i class="fa fa-sign-in-alt" style="color:red;"></i> Login</a> </li>
<li class="signup"><a href="signup.html" style="color:red;"><i class="fa fa-user-plus" style="color:red;"></i> Sign up</a> </li>
<li class="logout"><a onclick="deletecookie()" style="cursor:pointer;"><i class="fas fa-door-open" style="color:red;"></i> Log out</a></li>
</ul>
</li>
</ul>
</div>
</header>
<div class="body" id="body">
<div class="baslik">Movies</div>
<div class="baslik2"><a href="movies.html">See all</a></div>
<div id="movies">
</div>
<div class="baslik">Series</div>
<div class="baslik2"><a href="series.html">See all</a></div>
<div id="series">
</div>
<div class="baslik">Top Rated Movies</div>
<div class="baslik2"><a href="#">See all</a></div>
<div id="toprated">
</div>
</div>
<div class="footer">
<div class="">
<img src="img/sonlogo3.png" alt="logo">
<ul>
<li><a href="#">Help</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
<li><a href="#">Terms and Policies</a></li>
</ul><br><br>
<ul>
<li>© 2021 Cinemeter</li>
<li class="destroy">|</li>
<li>All rights reserved.</li>
</ul>
</div>
</div>
</div>
Firebase 数据库
这是我的网站
虽然 Firebase 可以对结果进行排序,但结果始终是升序排列的。如果您想按降序显示它们,则必须在您的应用程序代码中反转它们。
像这样:
const query = query(child(dbRef,"Movies"), orderByChild("movieScore"));
get(query).then((snapshot)=>{
var movies=[];
snapshot.forEach(childSnapshot => {
movies.push(childSnapshot.val())
});
movies.reverse
});
如果你想获得最高分,你也可以在查询中使用limitToLast
:
const query = query(child(dbRef,"Movies"), orderByChild("movieScore"), limitToLast(5));
另请参阅 ordering and filtering data and limiting the number of results 上的 Firebase 文档。
关于您的数据结构的几点说明:
- 为您的节点使用顺序数字键是 Firebase 中的一种反模式,通常 use push keys. Also see Best Practices: Arrays in Firebase。
- 您将分数存储为字符串,这必然会导致问题,因为字符串是按字典顺序排序的。我建议转换您的数据以将分数存储为数字(因此没有
"
引号)。
在我的网站上有一些我从 firebase 获得的电影。电影的分数在0到100之间。我已经在我的网站上找到了所有的电影。我还想按降序显示它们。(例如评分最高的 5 部电影)我怎样才能做到这一点?感谢您的回答。
const app = initializeApp(firebaseConfig);
const db = getDatabase(app);
const auth = getAuth(app);
const firebaseRef= ref(getDatabase());
var body = document.getElementById('movies');
var body2 = document.getElementById('series');
function AddItemsToTable(name, score, img, id) {
var movies = `<div class="content"><a href="movieDetail.html?movieId=${id}"><img src="${img}" ></a><p><a href="movieDetail.html?movieId=${id}">${name}</a></p> <p> <i class="fa fa-star checked" id="star${id}"></i> <a class="scoretxt">${score}%</a> </p> </div>`;
body.innerHTML+=movies;
}
function AddItemsToTable2(name, score, img, id) {
var series = `<div class="content"><a href="seriesDetail.html?seriesId=${id}"><img src="${img}" ></a><p><a href="seriesDetail.html?seriesId=${id}">${name}</a></p> <p> <i class="fa fa-star checked" id="star2${id}"></i> <a class="scoretxt">${score}%</a> </p> </div>`;
body2.innerHTML += series;
}
//*******************************I got the movies************************************************
function AddAllItemsToTable(TheMovies){
var counter=0;
TheMovies.forEach(element => {
if (counter===6) {
return;
}
AddItemsToTable(element.movieName, element.movieScore, element.movieImage, element.movieId);
counter++;
});
}
//************************I got tv series*********************************************
function AddAllItemsToTable2(TheSeries){
var counter=0;
TheSeries.forEach(element => {
if (counter===6) {
return;
}
AddItemsToTable2(element.seriesName, element.seriesScore, element.seriesImage, element.seriesId);
counter++;
});
}
function AddAllItemsToTable3(TheMovies){
var counter=0;
TheMovies.forEach(element => {
if (counter===6) {
return;
}
AddItemsToTable3(element.movieName, element.movieScore, element.movieImage, element.movieId);
counter++;
});
}
function getAllDataOnce(){
const dbRef=ref(db);
get(child(dbRef,"Movies"))
.then((snapshot)=>{
var movies=[];
snapshot.forEach(childSnapshot => {
movies.push(childSnapshot.val())
});
AddAllItemsToTable(movies);
});
}
function getAllDataOnce2(){
const dbRef=ref(db);
get(child(dbRef,"Series"))
.then((snapshot)=>{
var series=[];
snapshot.forEach(childSnapshot => {
series.push(childSnapshot.val())
});
AddAllItemsToTable2(series);
});
}
window.onload = (event) => {
getAllDataOnce();
getAllDataOnce2();
};
<div class="grid-container">
<header class="header">
<div class="solheader">
<a href="main.html" style="logo" class="big"> <img src="img/sonlogo3.png" alt="logo"></a>
<a href="main.html" style="logo" class="small"> <img src="img/logosmall.png" alt="logo" style="width:60px;height:48px;margin:5px;"></a>
</div>
<div class="ortaheader">
<input type="text" placeholder="Movies or TV series.." class="searchbox"><i class="fa fa-search arama"></i> </input>
<ul>
<li class="categories"><a href="#">Categories <i class="fa fa-caret-down" style="font-size:16px;"> </i></a>
<ul class="dropdown">
<li><a href="series.html">TV Series</a></li>
<li><a href="movies.html">Movies</a></li>
</ul>
</li>
</ul>
</div>
<div class="menu sagheader">
<ul>
<li>
<button class="ikon dropdown-toggle" type="button" data-toggle="dropdown"><i class="far fa-user"></i> </button>
<ul class="dropdown-menu">
<li class="accountname"><b><script>document.write(document.cookie.substring(5))</script></b></li>
<li class="login"><a href="login.html" style="color:red;"><i class="fa fa-sign-in-alt" style="color:red;"></i> Login</a> </li>
<li class="signup"><a href="signup.html" style="color:red;"><i class="fa fa-user-plus" style="color:red;"></i> Sign up</a> </li>
<li class="logout"><a onclick="deletecookie()" style="cursor:pointer;"><i class="fas fa-door-open" style="color:red;"></i> Log out</a></li>
</ul>
</li>
</ul>
</div>
</header>
<div class="body" id="body">
<div class="baslik">Movies</div>
<div class="baslik2"><a href="movies.html">See all</a></div>
<div id="movies">
</div>
<div class="baslik">Series</div>
<div class="baslik2"><a href="series.html">See all</a></div>
<div id="series">
</div>
<div class="baslik">Top Rated Movies</div>
<div class="baslik2"><a href="#">See all</a></div>
<div id="toprated">
</div>
</div>
<div class="footer">
<div class="">
<img src="img/sonlogo3.png" alt="logo">
<ul>
<li><a href="#">Help</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
<li><a href="#">Terms and Policies</a></li>
</ul><br><br>
<ul>
<li>© 2021 Cinemeter</li>
<li class="destroy">|</li>
<li>All rights reserved.</li>
</ul>
</div>
</div>
</div>
Firebase 数据库
这是我的网站
虽然 Firebase 可以对结果进行排序,但结果始终是升序排列的。如果您想按降序显示它们,则必须在您的应用程序代码中反转它们。
像这样:
const query = query(child(dbRef,"Movies"), orderByChild("movieScore"));
get(query).then((snapshot)=>{
var movies=[];
snapshot.forEach(childSnapshot => {
movies.push(childSnapshot.val())
});
movies.reverse
});
如果你想获得最高分,你也可以在查询中使用limitToLast
:
const query = query(child(dbRef,"Movies"), orderByChild("movieScore"), limitToLast(5));
另请参阅 ordering and filtering data and limiting the number of results 上的 Firebase 文档。
关于您的数据结构的几点说明:
- 为您的节点使用顺序数字键是 Firebase 中的一种反模式,通常 use push keys. Also see Best Practices: Arrays in Firebase。
- 您将分数存储为字符串,这必然会导致问题,因为字符串是按字典顺序排序的。我建议转换您的数据以将分数存储为数字(因此没有
"
引号)。