【问题标题】:Firebase retrieve highest 100 scoreFirebase 检索最高 100 分
【发布时间】:2016-09-14 11:33:57
【问题描述】:

这是我的 Firebase 的屏幕截图: 我正在尝试检索 firebase 数据库中的最高 100 分 我正在使用此代码将新节点添加到 firebase:

 Map<String, String> post1 = new HashMap<String, String>();
        post1.put("name",name);
        post1.put("score",score);
        myRef.push().setValue(post1);

这是我用来检索最高 100 分但不起作用的代码(代码有效,但它没有检索最高 100 分)

 Query queryRef = myRef.orderByChild("score").limitToFirst(100);
        queryRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                    Score score=postSnapshot.getValue(Score.class);
                    Log.d("test"," values is " + score.getName()  + " " + score.getScore());
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        }); 

【问题讨论】:

  • 最好将分数存储为数字而不是字符串。查看 frank 答案中的 cmets 了解更多信息。

标签: android firebase firebase-realtime-database


【解决方案1】:

Firebase 查询始终按升序排列。因此,您需要获得 最后一个 100,而不是前 100 个。

Query queryRef = myRef.orderByChild("score").limitToLast(100);

然后在客户端你需要反转项目。

或者,您可以将反转属性添加到您的项目invertedScore: -99。如果你这样做,你可以按倒排的分数排序,而不必倒排数组。

这种情况之前已经经常提到。我强烈建议您学习其中的一些:

【讨论】:

  • 我想知道这是否真的有效,因为在问题中分数是字符串而不是数字。它不会像这样排序:“1”、“12”、“2”、“3”、“33”、“333”、“4”吗?
  • 该死.... 很好地抓住了安德烈。显然我有一个盲点,因为我发誓我检查了它们是否存储为数字。 上述方法确实只有在您将分数存储为数字(或零填充字符串)时才有效
【解决方案2】:

这是一种从 firebas 获取最高薪水的方法
或从 firebase 获取最高数字

one   citiesRef.orderBy("name").limit(3);
two   citiesRef.orderBy("name", "desc").limit(3);
three citiesRef.where("population", ">", 100000).orderBy("population").limit(2);
four  citiesRef.where("population", ">", 100000).orderBy("population");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2016-07-26
    • 1970-01-01
    相关资源
    最近更新 更多