У меня есть эта функция, написанная на Swift, извлекающих в списке лидеров, а затем показывает его пользователю:Как правильно использовать queryOrderedByValue
@IBAction func onShowLeaderboardTapped(_ sender: Any) {
let leaderboardDB = FIRDatabase.database().reference().child("scores").queryOrderedByValue().queryLimited(toLast: 5)
leaderboardDB.observeSingleEvent(of: .value, with: { (snapshot) in
print("leaderboard snapshot:" ,snapshot)
}, withCancel: nil)
}
Проблема заключается в том, что, когда я принесу, он Гав мне следующий список:
Ben = 9;
Gabriela = 12;
Ivailo = 7;
Petar = 10;
Vania = 10;
Это показывает мне первые пять игроков, но затем он перечисляет их в алфавитном порядке. Поскольку это не большая проблема, я задаюсь вопросом, есть ли способ упорядочить их по значению.
Таковы правила:
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"scores": {
".indexOn": ".value"
}
}
}
И БД организована следующим образом:
matchrooms:
users:
scores:
> Ben: 9
> Dimitar: 7
> Gabriela: 12
> Ishest: 6
> Ivailo: 7
> Ivan: 5
> Marina: 3
> Pesho: 3
> Petar: 10
> Rosen: 6
> Vania: 10
> Yasen: 2
Итак, мой вопрос заключается в том, как правильно использовать queryOrderedByValue()
, чтобы получить первые пять игроков и список их по пунктам, которые они набрали?
Итак, во-первых - это плохой способ структурирования данных вашей базы данных, у вас должно быть имя узла, сгенерированное childByAutoId, с дочерними узлами имени: некоторое имя и оценка: некоторый балл. Затем вы можете запросить эти узлы и отсортировать по имени или счету и т. Д. Как бы то ни было, вы сортируете byValue, что именно вы получаете - B) en, G) abriela, I) vailo (B, G, I, PV) , – Jay
Я знаю, что это плохо, если вы заметили, у меня есть узел пользователя, где они зарегистрированы с функцией childByAutoId. список, который я создал, - это просто играть с firebase. –