我有这个功能写在斯威夫特是取排行榜,然后显示给用户:如何正确使用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)
}
的问题是,当我把它拿来,它gaves我下面的列表:
Ben = 9;
Gabriela = 12;
Ivailo = 7;
Petar = 10;
Vania = 10;
它显示了我的前五名球员,但它然后按字母顺序列出它们。由于这不是一个大问题,我想知道是否有一种方法来按价值排序。
这些规则:
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"scores": {
".indexOn": ".value"
}
}
}
和DB的组织结构如下:
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()
检索前五球员名单他们的得分是多少?
因此,首先 - 这是构建Firebase数据的一种不好的方法,您应该有一个由childByAutoId生成的节点名称,其中包含名称的子节点:某个名称和分数:某个分数。然后你可以查询这些节点并按名称或分数排序等等。实际上,你正在按照你正在得到的值排序 - B)en,G)abriela,I)vailo(B,G,I,PV) 。 – Jay
我知道这是一种糟糕的方式,如果你注意到,我有用户节点他们用childByAutoId函数注册。我生成的列表只是玩弄firebase。 –