Запрос данных от внутреннего ребенка (Deep Query) - PullRequest
0 голосов
/ 27 марта 2019

enter image description here

Привет, у меня есть структура базы данных Firebase, как на изображении.

Я хотел бы запросить данные, которые содержат "statuskirim"= "Not Shipped", который расположенглубоко внутри Order child.

У меня есть первый ребенок (Order), 2-й ребенок (081000, 0567743251. и т. д.), 3-й ребенок - внутри каждого 2-го ребенка (будет 1, 2, 3 и т. д.).

В каждом третьем дочернем узле есть узел с именем "statuskirim", который я хотел бы запросить.

ранее я не использовал третьего дочернего элемента (это 1,2,3 и т. Д.).

Мой запрос с этим кодом был успешным:

ordersRef=FirebaseDatabase.getInstance().getReference().child("Order")
FirebaseRecyclerOptions<AdminOrders> options = new FirebaseRecyclerOptions.Builder<AdminOrders>()      .setQuery(ordersRef.orderByChild("statuskirim").equalTo("Shipped"),AdminOrders.class)
.build();

Но я не знаю, как выполнять запросы после того, как я добавил 3-го ребенка.

Я думаю, мне следует добавить2-й ребенок в "ordersRef", i, e

ordersRef=FirebaseDatabase.getInstance().getReference().child("Order").child("0810000")

Это работа для одного 2-го ребенка («0810000», но как мне добавить всех 2-х детей (в случае, если у них много 2-х детей)

отредактировал код в виде Питера Хадада Сугегстеда:

DatabaseReference reference = 
FirebaseDatabase.getInstance().getReference("Order");

reference.addValueEventListener(new ValueEventListener() {
  @Override
public void onDataChange(DataSnapshot dataSnapshot) {
  for(DataSnapshot datas : dataSnapshot.getChildren()){
     String key = datas.getKey();

FirebaseRecyclerOptions<AdminOrders> options = new 
FirebaseRecyclerOptions.Builder<AdminOrders>()    .setQuery(ordersRef.orderbyChild(key).orderByChild("statuskirim").equalTo("Shipped"),AdminOrders.class)

.build ();

... (так, заканчивая отображение тега, данные e, tc), но затемрезультат показывает только последние данные 2ой ребенок не все данные

1 Ответ

0 голосов
/ 27 марта 2019

Попробуйте следующее:

DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Order");

reference.addValueEventListener(new ValueEventListener() {
  @Override
public void onDataChange(DataSnapshot dataSnapshot) {
  for(DataSnapshot datas : dataSnapshot.getChildren()){
     String key = datas.getKey();

    reference.child(key).orderByChild("statuskirim").equalTo("Shipped").addListenerForSingleValueEvent(new ValueEventListener() {
      @Override
   public void onDataChange(DataSnapshot dataSnapshot) {
      for(DataSnapshot ds : dataSnapshot.getChildren()){
       String statuskirim = ds.child("statuskirim").getValue().toString();
      }
    }
      @Override
   public void onCancelled(DatabaseError databaseError) {}
  });

  }
}
 @Override
public void onCancelled(DatabaseError databaseError) {
  }
});

Здесь, в этом случае getKey() будет извлекать второго потомка, затем вы можете использовать его внутри child(), а затем вы сможете использовать orderByChild() запрос.

Хотя, возможно, лучше оптимизировать базу данных и не добавлять больше вложенных дочерних элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...