我正在将数据提取到我的Firebase并显示到表中的表。我得到每个人的数据。我使用orderByChild('id')
,但它首先显示较小的ID。我需要从大到小排序。
我为每个数据创建不同的表。
var database = firebase.database();
database.ref("players").orderByChild('id').once('value', function(snapshot) {
if (snapshot.exists()) {
var content = '';
snapshot.forEach(function(data) {
var val = data.val();
var pet = val.NewZaman.substring(12, 19);
var pet2 = val.NewZaman.substring(0, 11);
content += '<table class="filmlermob-table">';
content += '<tr>';
content += '<th colspan="3">' + val.Oynayanlar + '</th>';
content += '</tr>';
content += '<tr>';
content += '<td data-th="filmtarih">' + pet2 + pet + '</td>';
content += '<td data-th="filba" style="background: #f7f7f7;"><p class="nams">' + val.filba+ '</td>';
content += '<td data-th="filmkanal">' + val.filmkanal+ '</td>';
content += '</tr>';
content += '</table>';
});
$('#filmler-table').append(content);
}
HTML
<table id="filmler-table" class="table">
</table>
修改
我用
function kontole() {
var db = firebase.database();
var updates = {};
db.ref().child('players').once('value', function(snapshot) {
snapshot.forEach(function(childSnapshot) {
var childKey = childSnapshot.key;
var childData = childSnapshot.val();
console.log(childData);
updates[childKey + '/sortingId'] =
parseInt(childSnapshot.val().id, 10) * -1;
});
db.ref().update(updates);
});
}
答案 0 :(得分:1)
最好依靠数据库(后端)对数据进行排序,而不要依靠前端(特别是如果您有大量记录)。
在Firestore中,您可以按升序或降序排序(请参阅https://firebase.google.com/docs/firestore/query-data/order-limit-data),这在实时数据库中是不可能的(orderByChild()
仅按升序排序)。
由于id
是一个数字值,因此实时数据库的一种可能方法是复制您的数据,并将id值(即id
乘以-1)的加和逆存储在额外的字段,例如sortingId
。
然后您的查询将如下所示:
database.ref("players").orderByChild('sortingId').once('value', function(snapshot) {...}))
要更新所有现有数据,请使用以下JavaScript代码:
var db = firebase.database();
var updates = {};
db.ref('players').once('value', function(snapshot) {
snapshot.forEach(function(childSnapshot) {
var childKey = childSnapshot.key;
var childData = childSnapshot.val();
console.log(childData);
updates['/players/' + childKey + '/sortingId'] =
parseInt(childSnapshot.val().id, 10) * -1;
});
db.ref().update(updates);
});