如何使用android在firebase数据库中执行连接查询

如何使用android在firebase数据库中执行连接查询,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,在这里,组中成员的密钥是用户的密钥。 任务:要根据组的成员密钥从此处输入codem用户获取comida_id。 在这里,我们试图首先从组中获取成员密钥。在获取成员密钥的同时,我们还希望在成员循环进行时获取用户和用户的comida_id。所以这个场景将是我们首先根据组的键(例如createTime、groupName、members)从组中获取所有键。现在,我们将在成员上执行循环,从而获得成员的密钥。现在,在该循环中获取该成员的密钥时,我们希望从用户的密钥中获取comida_id,该id将仅在该循

在这里,组中成员的密钥是用户的密钥。 任务:要根据组的成员密钥从
此处输入code
m用户获取comida_id。 在这里,我们试图首先从组中获取成员密钥。在获取成员密钥的同时,我们还希望在成员循环进行时获取用户和用户的comida_id。所以这个场景将是我们首先根据组的键(例如createTime、groupName、members)从组中获取所有键。现在,我们将在成员上执行循环,从而获得成员的密钥。现在,在该循环中获取该成员的密钥时,我们希望从用户的密钥中获取comida_id,该id将仅在该循环中获取

GroupKey->获取数据(createTime、groupName、成员、餐厅)->获取成员密钥和comida_id(在循环中(获取成员密钥然后获取comida_id))

*我的代码

FirebaseDatabase mDatabase_gp = FirebaseDatabase.getInstance();
mDatabase_gp.getReference("Group/"+group_key).addValueEventListener(
                new ValueEventListener()
                {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot)
                    {

                        Map<String, Object> valuesMap = (HashMap<String, Object>) dataSnapshot.getValue();

                        Map userkey = (Map) valuesMap.get("members");
                        Log.d("Members", String.valueOf(userkey));

                        for (Object ke: userkey.keySet())
                        {
                            Log.d("runfirst","First Run");

                            String key = String.valueOf(ke.toString());
                            Log.d("Member key",key);


                            // HERE WHAT CORRESPONDS TO JOIN
                            FirebaseDatabase User = FirebaseDatabase.getInstance();
                            User.getReference("User/"+key).addValueEventListener(
                                    new ValueEventListener()
                                    {
                                        @Override
                                        public void onDataChange(DataSnapshot dataSnapshot)
                                        {
                                            Map<String, Object> valuesMap = (HashMap<String, Object>) dataSnapshot.getValue();

                                            String userid = String.valueOf(valuesMap.get("comida_id"));
                                            Log.d("comida_id",userid);
                                            Toast.makeText(ChatSectionActivity.this,userid,Toast.LENGTH_SHORT).show();
                                        }
                                        @Override
                                        public void onCancelled(DatabaseError databaseError)
                                        {
                                        }
                                    }
                            );
                        }

                        Log.d("runlast","Last Run");
                    }
                    @Override
                    public void onCancelled(DatabaseError databaseError)
                    {

                    }
                }
        );

Firebase没有联接查询。你做错的是你在Fireabasueser上引用你的数据库,这是错误的

mdatabaseReference.child("Answer").child("Answer"+QID).orderByChild("questionId").equalTo(QID).addValueEventListener(new ValueEventListener() {

    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

            if (muftiAnswer_List.size() > 0)
                muftiAnswer_List.clear();

            for (DataSnapshot postsnapshot : dataSnapshot.getChildren()) {


                final AnswerClass muftiAnswer = postsnapshot.getValue(AnswerClass.class);


           String ide=muftiAnswer.getMuftiId(); //getting AlimId From Class object


                Log.e(TAG, "Alim:"+ muftiAnswer.getMuftiId());


                //Using Query to get Alim Name From Data Table.!
                mdatabaseReference.child("users").child("Alim").child(ide).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override      //.orderByChild("alimId").equalTo(user_Id)
                    public void onDataChange(DataSnapshot dataSnapshot) {

                        Log.e(TAG, "AlimNode:");


                        for(DataSnapshot postSnapshot:dataSnapshot.getChildren())
                        {

                            Log.e(TAG, "EqualNode:");


                            if(postSnapshot.getKey().equals("alimName"))
                            {
                                Log.e(TAG, "AlimNameNodeSnapShot:");

                                //Setting Alim Name in Current Object replcing id for name

                                muftiAnswer.setMuftiId(postSnapshot.getValue().toString());

                            }

                           // resultMuftiAnswer_List.add(muftiAnswer);

                        }//End of snapshot
                    }//ondata Change

                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        // Failed to read value
                        Log.w(TAG, "Failed to read value.", databaseError.toException());
                    }
                });//End OF Alim Query
            }//end of comments

            circular_progress2.setVisibility(View.GONE);

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        Toast.makeText(Details_Activity.this, "LOLOLOL", Toast.LENGTH_SHORT).show();
        }
    });
您必须使用嵌套循环进行连接,如MYSQL

Query query = reference.child("issue").orderByChild("id").equalTo(0);
query.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()) {
            // dataSnapshot is the "issue" node with all children with id 0
            for (DataSnapshot issue : dataSnapshot.getChildren()) {
                // do something with the individual "issues"
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});
访问链接以了解更多信息


Firebase没有联接查询。你做错的是你在Fireabasueser上引用你的数据库,这是错误的

mdatabaseReference.child("Answer").child("Answer"+QID).orderByChild("questionId").equalTo(QID).addValueEventListener(new ValueEventListener() {

    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

            if (muftiAnswer_List.size() > 0)
                muftiAnswer_List.clear();

            for (DataSnapshot postsnapshot : dataSnapshot.getChildren()) {


                final AnswerClass muftiAnswer = postsnapshot.getValue(AnswerClass.class);


           String ide=muftiAnswer.getMuftiId(); //getting AlimId From Class object


                Log.e(TAG, "Alim:"+ muftiAnswer.getMuftiId());


                //Using Query to get Alim Name From Data Table.!
                mdatabaseReference.child("users").child("Alim").child(ide).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override      //.orderByChild("alimId").equalTo(user_Id)
                    public void onDataChange(DataSnapshot dataSnapshot) {

                        Log.e(TAG, "AlimNode:");


                        for(DataSnapshot postSnapshot:dataSnapshot.getChildren())
                        {

                            Log.e(TAG, "EqualNode:");


                            if(postSnapshot.getKey().equals("alimName"))
                            {
                                Log.e(TAG, "AlimNameNodeSnapShot:");

                                //Setting Alim Name in Current Object replcing id for name

                                muftiAnswer.setMuftiId(postSnapshot.getValue().toString());

                            }

                           // resultMuftiAnswer_List.add(muftiAnswer);

                        }//End of snapshot
                    }//ondata Change

                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        // Failed to read value
                        Log.w(TAG, "Failed to read value.", databaseError.toException());
                    }
                });//End OF Alim Query
            }//end of comments

            circular_progress2.setVisibility(View.GONE);

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        Toast.makeText(Details_Activity.this, "LOLOLOL", Toast.LENGTH_SHORT).show();
        }
    });
您必须使用嵌套循环进行连接,如MYSQL

Query query = reference.child("issue").orderByChild("id").equalTo(0);
query.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()) {
            // dataSnapshot is the "issue" node with all children with id 0
            for (DataSnapshot issue : dataSnapshot.getChildren()) {
                // do something with the individual "issues"
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});
访问链接以了解更多信息


添加数据库结构JSON。?感谢回复转到此链接您可以看到数据库图像添加数据库结构JSON。?感谢回复转到此链接您可以看到数据库图像感谢回复,如何在查询下执行查询-如果您理解我的问题。实际上,在第一次查询中,从组中获取成员键的列表,那个时我用于循环,当每个键获取时,然后创建对该实例的查询,我从用户选项卡中获取该键信息。请帮帮我point@DipeshKhatate请检查答案谢谢,实际上查询没有得到确切的答案。我想做的是,当调用第一个循环时,我从该键中获取一个键,我想使用该键进行另一个查询并获取值。但现在我先获取所有密钥,然后它会查询另一个循环,请查看此链接上的数据库-在上面的示例中,您将获得一个ide,然后使用该ide从firebase获取更多数据,如果您正在获取所有数据,只需使用postSnapshot获取每个循环的所有数据,并获取您所需的唯一密钥,这也没关系want@DipeshKhatatefor(DataSnapshot postSnapshot:DataSnapshot.getChildren()){Log.e(标记“EqualNode:”);if(postSnapshot.getKey().equals(“alimName”)){Log.e(标记“AlimNameNodeSnapShot:”);//在当前对象应答id中为名称muftiAnswer.setMuftiId(postSnapshot.getValue().toString());}感谢您的回复,如果您理解我的问题,如何在查询下执行查询?实际上,在第一次查询中,从组中获取成员密钥列表,在每次获取密钥时,我都用于循环,然后创建对该实例的查询,我从用户选项卡中获取了该密钥信息艾尔,请帮帮我point@DipeshKhatate请检查答案谢谢,实际上查询没有得到确切的答案。我想做的是,当调用第一个循环时,我从该键中获取一个键,我想使用该键进行另一个查询并获取值。但现在我首先获取所有键,然后再查询另一个键op请查看此链接上的数据库-在上面的示例中,您获得了一个ide,然后使用该ide从firebase获取进一步的数据,如果您获得的所有数据仅用于postSnapshot的每个循环,并获取您需要的唯一密钥,那么这是可以的want@DipeshKhatate对于(DataSnapshot postSnapshot:DataSnapshot.getChildren()){Log.e(标记,“EqualNode:”);if(postSnapshot.getKey().equals(“alimName”){Log.e(标记,“AlimNameNodeSnapShot:”);//为名称muftiAnswer.setMuftiId(postSnapshot.getValue().toString())在当前对象应答id中设置ALM名称;}