【问题标题】:Query firebase database and retrieve limited data查询 firebase 数据库并检索有限数据
【发布时间】:2018-01-21 14:57:41
【问题描述】:

我有一个使用 Firebase 数据库的 android 应用程序。 Firebase 数据库结构如下:

Users 的每个孩子都是不同用户的username

我想要什么

我的应用程序中有一个搜索字段,我在其上附加了TextChangedListener。此搜索字段可用于搜索其他用户的usernames

现在,当用户在搜索字段中输入任何文本(例如 jo)时,我想从数据库中获取以 jo 开头的 前 20 个用户名,在我的情况下,它会返回john_jj 和所有其他以jo 开头的用户名。

相当于:

SELECT username 
FROM table 
WHERE username LIKE 'jo%' 
LIMIT 20;

问题

如何编写查询以从 Firebase 数据库中获取前 20 个以特定字母开头的用户名,例如 jo

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    这个:

    SELECT username 
    FROM table 
    WHERE username LIKE 'jo%' 
    LIMIT 20;
    

    在firebase中可以这样:

    DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Users");
    ref.orderByChild(username).startAt("jo").endAt("jo\uf8ff").limitToFirst(20).addValueEventListener(new ValueEventListener(){
    
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot data: dataSnapshot.getChildren()){
           String usernames=data.getKey();
        }
    }
    
    @Override
    public void onCancelled(DatabaseError databaseError) {
    
      }
    });
    

    child("Users") 是表

    orderByChild(username) 是列

    startAt("jo").endAt("jo\uf8ff") 是这个 LIKE 'jo%'

    limitToFirst(20) 是这个 LIMIT 20;

    有关 firebase 查询的更多信息,请查看:Queries in Firebase

    【讨论】:

    • 很好的答案彼得!我建议使用ChildEventListener(或显示如何循环DataSnapshot.getChildren())以确保用户以正确的顺序显示。
    • 谢谢@FrankvanPuffelen!我添加了DataSnapshot.getChildren()keys 应该是用户名,因为他在其中循环。(如果我没有错)
    • startAt() 之后尝试与endAt() 一起使用。正如你评论的那样,我看到了这个stackoverflow.com/questions/37798366/…
    • 只获取jo% 使用startAt("jo").endAt("jo\uf8ff")...\uf8ff 只是 unicode 中的最后一个字符,因此充当结束保护。
    • 刚刚做到了。身体干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多