#jquery #firebase #firebase-realtime-database
# #jquery #firebase #firebase-realtime-база данных
Вопрос:
Я извлекаю данные в свою firebase и отображаю в таблице внутри таблицы. Я получаю данные по каждому. Я использую orderByChild('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);
});
}
Комментарии:
1. Можете ли вы показать свою модель данных? Какие значения вы храните в id? Число? Автоматически генерируемые уникальные идентификаторы Firebase? Буквенно-цифровая строка?
2. Обновлено первое сообщение.
Ответ №1:
Лучше полагаться на базу данных (серверную часть) для сортировки ваших данных, чем полагаться на ваш интерфейс (особенно если у вас большое количество записей).
В Firestore вы можете сортировать в порядке возрастания или убывания (см. https://firebase.google.com/docs/firestore/query-data/order-limit-data ) это невозможно в базе данных реального времени ( orderByChild()
только сортировка в порядке возрастания).
Поскольку 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);
});
Комментарии:
1. Как добавить ‘sortingId’ всех дочерних элементов за один раз и как я включаю.
2. @Dorbagna можете ли вы добавить к своему вопросу код, который вы используете для создания элемента?
3. Я думаю, что нашел способ. Я использую «orderByChild(‘id’).limitToFirst(1).» когда я получаю данные. Поэтому я просто вызываю дочерний элемент с наименьшим числом. Затем я использую «myref.child(«id»).set(biggestnumber);» и «biggestnumber = parseInt(biggestnumber ) -1; Затем нажимаю кнопку и вызываю second. Есть ли какой-либо другой простой способ?
4. @Dorbagna Извините, что не на 100% понятно, что вы имеете в виду. Вы хотите знать, как обновить существующие данные или как записать два значения для новых данных?
5. Я могу использовать оба. Но я думаю, что сначала обновлю существующие данные. Затем мне нужно будет записать новые данные.