如何按价值降序从firebase获取数据?

     2023-03-14     19

关键词:

【中文标题】如何按价值降序从firebase获取数据?【英文标题】:How to get data from firebase in descending order of value? 【发布时间】:2017-07-17 07:05:01 【问题描述】:

我想获得前 10 名用户的游戏高分,并将其显示在表格视图中。

leaderboards
 CQVudhI2OjTfNbqWOWi2T1DTWKw2
 HIGH-SCORE: 23
 PLAYER-NAME: Russell
 REACTION-TIME: .9
 SWIPES: 12

 F9IbjpVSE8g5YN3PX0sdhSNGULJ3
 HIGH-SCORE: 29
 PLAYER-NAME: Clayton
 REACTION-TIME: .87
 SWIPES: 22

 HDIHCUSJDHCJHZKSHJXH
 HIGH-SCORE: 89
 PLAYER-NAME: Damien
 REACTION-TIME: .77
 SWIPES: 32

 jdhsjdbwkjsdkahnkdnk232j3j2
 HIGH-SCORE: 43
 PLAYER-NAME: Christopher
 REACTION-TIME: .99
 SWIPES: 32

在表格视图中,我希望显示前 10 名得分最高者的姓名和得分。

任何帮助将不胜感激。谢谢

【问题讨论】:

【参考方案1】:

Firebase 不提供通过查询反转排序顺序的任何方法。但是,如果您将分数存储为负值,则非常简单。

这是一个结构

scores
  score_0
     amt: -20
  score_1
     amt: -10
  score_2
     amt: -12
  score_3
     amt: -1
  score_4
     amt: -22

然后是读取前三个“高”分数的代码 22,然后是 20 和 12

    let scoresRef = self.ref.child("scores")
    let queryRef = scoresRef.queryOrdered(byChild: "amt").queryLimited(toFirst: 3)

    queryRef.observeSingleEvent(of: .value, with:  snapshot in   
        for child in snapshot.children 
            let snap = child as! DataSnapshot
            print(snap.value)
        
    )

和输出

Optional(
    amt = "-22";
)
Optional(
    amt = "-20";
)
Optional(
    amt = "-12";
)

当然,如果分数数量有限,也可以将它们读入数组并进行排序。

为了完整起见,如果您不想将分数存储为负值,请按以下方式操作。

    let scoresRef = self.ref.child("scores")
    let queryRef = scoresRef.queryOrdered(byChild: "amt").queryLimited(toLast: 3)

    queryRef.observeSingleEvent(of: .value, with:  snapshot in

        var scoresArray = [Int]()

        for child in snapshot.children 
            let snap = child as! DataSnapshot
            let score = snap.childSnapshot(forPath: "amt")
            scoresArray.append(score.value as! Int)
        

        scoresArray = scoresArray.reversed()
        print(scoresArray)
    )

上述代码通过 queryLimited(toLast) 读取三个最高值,即 12、20 和 22,并填充一个数组。数组可以反转,按 22、20 和 12 降序排列。

最后一个选择是将它们读取为 12、22、20,但将每个 amt 插入到位置 0 的数组中。因此 12 将位于索引 0,然后 22 将位于索引 0,而 12 将位于索引 1等等

【讨论】:

感谢大家的帮助!我所做的是做一个 querylimted(tolast 10) 这是我得到的 10 个最高分数,然后将它添加到一个数组并反转它。这被认为是足够好的代码吗? @russsellphillips 如果它有效,稳定且易于维护,那么绝对是的,它已经足够好了!如果我的回答有帮助,请采纳,这样也能帮助到其他人!【参考方案2】:

我认为您必须首先将所有 Databae 加载到一个结构数组中,将您的数组过滤到新数组中(如何做到这一点,检查here),然后在 tableView 上表示它。顺便说一句,如果您只是从 Firebase 开始,我强烈建议您阅读 this 教程。希望我的回答有用:)

【讨论】:

【参考方案3】:

这是另一种方法,您可以节省一些代码。从 firebase 检索时不要使用 append,而是使用 insert(newObject, at: 0)。

在代码中你可以看到我替换了:

scoresArray.append()

scoresArray.insert( score, at: 0)

完整代码:

var scoresArray = [Int]()
let scoresRef = self.ref.child("leaderboards")
let queryRef = scoresRef.queryOrdered(byChild: "HIGH-SCORE").queryLimited(toLast: 10)

queryRef.observeSingleEvent(of: .value, with:  snapshot in
  
  for child in snapshot.children 
    let snap = child as! DataSnapshot
    let score = snap.childSnapshot(forPath: "HIGH-SCORE").value as! Int
    scoresArray.insert( score, at: 0)
  

)

最初我从这里得到这个答案: https://www.youtube.com/watch?v=4y_NLkYT6NU

【讨论】:

如何按降序从mongodb集合中查找数据? [复制]

】如何按降序从mongodb集合中查找数据?[复制]【英文标题】:howtofinddatafrommongodbcollectionindesendingorder?[duplicate]【发布时间】:2016-04-2204:49:30【问题描述】:假设这是一个mongodb中名为books的集合,数据如下。这里我忽略了_id。请提... 查看详情

如何在Android Firebase实时数据库中按降序获取孩子[重复]

】如何在AndroidFirebase实时数据库中按降序获取孩子[重复]【英文标题】:HowtogetchildrenindescendingorderinAndroidFirebaseRealtimeDatabase[duplicate]【发布时间】:2021-07-0310:52:32【问题描述】:这是我的实时数据库图片。DatabaseImage如何按降序获... 查看详情

如何按升序或降序排列firebase数据库数据?

】如何按升序或降序排列firebase数据库数据?【英文标题】:Howtoarrangefirebasedatabasedatainascendingordescendingorder?【发布时间】:2018-05-2303:34:20【问题描述】:我已经设置了一个firebase数据库,我想知道如何制作它,以便我的listView以... 查看详情

Python:如何检查键是不是存在并按降序从字典中检索值

】Python:如何检查键是不是存在并按降序从字典中检索值【英文标题】:Python:HowtocheckifkeysexistsandretrievevaluefromDictionaryindescendingpriorityPython:如何检查键是否存在并按降序从字典中检索值【发布时间】:2013-06-2222:05:52【问题描述... 查看详情

如何从 Xamarin 中的 Firebase 获取价值?

】如何从Xamarin中的Firebase获取价值?【英文标题】:HowtoGetValuefromFirebaseinXamarin?【发布时间】:2017-09-1523:25:06【问题描述】:如何使用XamarinFirebase.DatabaseAndroid从Firebase实时数据库获取数据,因为没有可用的文档并且我是新用户。p... 查看详情

如何在 Firebase 中按降序排列数据 - Python

】如何在Firebase中按降序排列数据-Python【英文标题】:HowtoarrangedataindescendingorderinFirebase-Python【发布时间】:2020-12-0711:42:03【问题描述】:我有一个Python游戏,它获取有关用户的信息,甚至存储积分。我想为它制作一个排行榜,... 查看详情

如何从 Firebase 数据库中的 autoID 获取价值 - Swift

】如何从Firebase数据库中的autoID获取价值-Swift【英文标题】:HowtogetvaluefromautoIDinFirebaseDatabase-Swift【发布时间】:2021-01-3022:32:18【问题描述】:我有这段代码,我想显示来自Firebase数据库的AutoIds值的计数。\'letuid=Auth.auth().currentUser... 查看详情

使用分页(使用codeigniter)时如何按降序获取数据?

】使用分页(使用codeigniter)时如何按降序获取数据?【英文标题】:howtogetdataindescendingorderwhenusingpagination(usingcodeigniter)?【发布时间】:2013-08-2712:25:36【问题描述】:我已经使用codeigniter库函数进行分页。它可以工作,但我不知... 查看详情

如何在另一个孩子 Firebase 中按孩子订购

】如何在另一个孩子Firebase中按孩子订购【英文标题】:HowtodoorderbychildinsideanotherchildFirebase【发布时间】:2018-09-0121:01:43【问题描述】:我正在尝试按另一个孩子内部的孩子值获取所有按升序和降序排列的数据。在主要课程范围... 查看详情

java示例代码_按'的降序遍历伯克利数据库;价值';

java示例代码_按'的降序遍历伯克利数据库;价值'; 查看详情

Firebase 按降序对数据进行排序。 (只排序了一半。)

】Firebase按降序对数据进行排序。(只排序了一半。)【英文标题】:Firebasesortingdataindescendingorder.(onlyhalfsorted.)【发布时间】:2018-05-2101:47:16【问题描述】:我正在尝试按值将我的列表视图排序为降序。我试过使用Collections.reverse... 查看详情

Firebase 从数据库中获取价值

】Firebase从数据库中获取价值【英文标题】:Firebasegetvaluefromdatabase【发布时间】:2017-12-2214:49:28【问题描述】:问题是:当你只知道用户他的用户名时,如何取uid行?例如你只知道\'senneken\',你想知道\'senneken\'的uid额外信息:我... 查看详情

如何按降序创建 HKAnchoredObjectQuery 并限制

】如何按降序创建HKAnchoredObjectQuery并限制【英文标题】:HowtocreateaHKAnchoredObjectQueryindescendingorderwithlimit【发布时间】:2017-06-1608:42:47【问题描述】:在我们的一个项目中。我必须获取过去30天的Healthkit数据。我们正在使用HKAnchoredO... 查看详情

如何按降序创建 HKAnchoredObjectQuery 并限制

】如何按降序创建HKAnchoredObjectQuery并限制【英文标题】:HowtocreateaHKAnchoredObjectQueryindescendingorderwithlimit【发布时间】:2017-06-1608:42:47【问题描述】:在我们的一个项目中。我必须获取过去30天的Healthkit数据。我们正在使用HKAnchoredO... 查看详情

如何从 Firebase android kotlin 获取所有具有特定价值的孩子?

】如何从Firebaseandroidkotlin获取所有具有特定价值的孩子?【英文标题】:howtogetallchildwithspecificvaluefromFirebaseandroidkotlin?【发布时间】:2021-05-3005:33:32【问题描述】:我想从我的数据库中的所有用户那里获取图像中的颜色项。我试... 查看详情

如何按文档 ID 从 Firebase Firestore 获取数据 - iOS?

】如何按文档ID从FirebaseFirestore获取数据-iOS?【英文标题】:HowtofetchdatafromFirebaseFirestorebydocumentID-iOS?【发布时间】:2021-01-1216:32:14【问题描述】:如何从FirebaseFirestore中获取数据,而不是通过集合,而是从当前用户(id)中获取数据... 查看详情

从 Firebase 数据库中获取价值

】从Firebase数据库中获取价值【英文标题】:GetValuefromFirebaseDatabase【发布时间】:2017-08-0213:54:05【问题描述】:我需要从我的Firebase数据库中的节点密码中获取字符串值以与用户输入进行比较,但不幸的是我无法获取该值。这是... 查看详情

如何在codeigniter中按日期降序获取订单

】如何在codeigniter中按日期降序获取订单【英文标题】:Howtogetorderbydatedescendingorderincodeigniter【发布时间】:2016-12-1619:46:15【问题描述】:我想显示时间戳降序,但我的查询不起作用,这是我的代码:$this->db->order_by("DATE(field_... 查看详情