如何从Firebase中比较和检索不同表中的项目

时间:2017-12-12 16:15:41

标签: android firebase firebase-realtime-database

我有2个表(请求和驱动程序工作)。每个请求孩子(riderId)将有不同的电话号码。如何从当前的Requests键检索当前riderId,以便从driversWorking表中检索riderId位置(经度和纬度)。

以下是我的数据库:

enter image description here

1 个答案:

答案 0 :(得分:0)

您可以使用嵌套查询来实现此目的。假设您有一个名为users的节点并且同时是Firebase root的直接子节点并假设driversWorking也是Firebase根目录的直接子节点,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference yourRef = userIdRef.child("users").child(userId);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String riderId = dataSnapshot.child("riderId").getValue(String.class);

        DatabaseReference ref = rootRef.child("driversWorking").child(driverId).child("l");
        ValueEventListener eventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for(DataSnapshot ds : dataSnapshot.getChildren()) {
                    double zero = ds.child("0").getValue(Double.class);
                    double one = ds.child("1").getValue(Double.class);
                    Log.d("TAG", zero + " / " + one);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {}
        };
        yourRef.addListenerForSingleValueEvent(eventListener);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
ref.addListenerForSingleValueEvent(valueEventListener);

其中userId是登录用户的ID,driverId是驱动程序的ID。在您提供的示例中,可以是0163640500