Firebase 根据日期按点排序

Posted

技术标签:

【中文标题】Firebase 根据日期按点排序【英文标题】:Firebase sort by points depending on date 【发布时间】:2017-05-24 00:01:56 【问题描述】:

我正在尝试添加每月记分牌,但这对我来说似乎有点困难。我不知道如何将特定值添加到某个列表或数组中。与日期一样,只有 09.01.2017 值的日期。如果我能做到这一点,那么我认为我可以按价值对它们进行排序。

        FirebaseDatabase database = FirebaseDatabase.getInstance();
    final DatabaseReference highscoreRef = database.getReference();




    // Ordering with score and adding key values as string to nameList and scoreList
    highscoreRef.orderByChild("score").limitToLast(10).addChildEventListener(new ChildEventListener() 
        @Override
        public void onChildAdded(DataSnapshot snapshot, String previousChildKey) 
            try 

                nameList.push(snapshot.child("name").getValue().toString());
                scoreList.push(snapshot.child("score").getValue().toString());

             catch (Exception e) 
                //Toast.makeText(getApplicationContext(), "Error fetching data.", Toast.LENGTH_SHORT).show();
            
        
        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) 

        
        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) 

        
        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) 

        
        @Override
        public void onCancelled(DatabaseError databaseError) 
            Toast.makeText(getApplicationContext(), "Error sending data.", Toast.LENGTH_LONG).show();
        

    );

【问题讨论】:

【参考方案1】:

如果您想查询日期范围,您应该以允许查询范围的格式存储它们。对于可以是 timestamp 或按字典顺序排序的字符串的日期。

您当前将日期存储为dd.MM.yyyy 字符串,它不能按字典顺序排序。我建议切换到yyyy-MM-dd,所以2019-01-09。这样,如果您想获取一月份的所有帖子,您可以进行范围查询:

ref.orderByChild("date").startAt("2017-01-01").endAt("2017-01-31")

如果您已经知道需要每月排行榜,我建议您更改数据库结构以反映这一点。所以:按他们所在的月份存储分数:

2017-01
  -K34761761238712
    name: "GGGG"
    score: 3
  -K4875731941298a
    name: "AAA"
    score: 1

这样您就可以按顺序获得一月份的高分:

ref.child("2017-01").orderByChild("score").limitToLast(10)

【讨论】:

嘿,我现在已经这样排序了,我不能每月最好:i.imgur.com/eAvZRen.png 以你截图中的当前结构,你只能获得每日排行榜。如果您想要每月排行榜,您应该像我在回答中所做的那样存储每月排行榜。 @FrankvanPuffelen 如何使用 ServerValue.Timestamp 将日期存储为字符串日期

以上是关于Firebase 根据日期按点排序的主要内容,如果未能解决你的问题,请参考以下文章

Firebase + Swift TableView 按日期排序

按日期对 Firebase 数据进行排序

如何根据来自firebase的时间戳获取排序数据[重复]

使用firebase数据库查询根据喜欢对帖子进行排序

如何根据密钥对 Firebase 控制台中的节点进行排序

Firebase&Filtering按值/键排序