首页 > 解决方案 > Android Studio 中的 Firebase 数据库查询

问题描述

我想在 Firebase 数据库中进行查询:如果在“检测名称”节点中输入了数据,那么它会在“受过培训的人姓名”节点中查询相同的数据,如果两者相等,那么它只会获取所有同名的子节点而不是全部价值观。

如果检测名称节点中的孩子是 maarij,则在受过训练的人名中搜索 maarij 并仅获取 maarij 的所有信息。

数据库:

如果检测名称节点中的孩子是 maarij,则在受过训练的人名中搜索 maarij 并仅获取 maarij 的所有信息。

我尝试使用此代码进行查询,但它提供了保存在受训人员姓名节点中的所有数据。如果在“Trained Person Names”节点中找到“detection name”子项,我只想要该名称的特定数据和信息。

final Query mydata= FirebaseDatabase.getInstance().getReference().child("Trained Person Names");
    mydata.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            final Query myquery =   detection_Name.orderByChild("Detection name").limitToLast(1)
                    .equalTo(String.valueOf(trained_Name.orderByChild("Guest Name")));
            Log.i("33","VALUE OF DATASNAPSHOT:"+dataSnapshot.getValue());
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

谢谢!!

标签: androidfirebasefirebase-realtime-database

解决方案


你做错了兄弟因为名字不是一个唯一的词,只使用不会在任何地方重复的唯一参数。然后你可以正确地完成你的任务。创建一个唯一 ID 并将该值保存在“检测名称”表中。将该值用作“Trained Person Names”表中的键。现在,您必须做一件事,首先从“检测名称”表中获取该值并使用如下所示:

final Query mydata= FirebaseDatabase.getInstance().getReference().child("Trained Person Names");
mydata.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        final Query myquery =   detection_Name.orderByChild("Detection name").limitToLast(1)
                .equalTo(String.valueOf(trained_Name.orderByChild("Guest Name")));
        Log.i("33","VALUE OF DATASNAPSHOT:"+dataSnapshot.getValue());
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});

您可以像这样创建一个唯一值:

String uniqueId = FirebaseDatabase.getInstance().getReference().push().toString();

推荐阅读