Firebase суммирует все дочерние записи, когда совпадают дочерние значения - PullRequest
0 голосов
/ 07 октября 2018

я видел этот вопрос в sql этот вопрос но как это будет реализовано в firebase.Это моя базовая структура database

Мне нужно подвести итоги расходов по названию.Мне нужен вывод, как этот

вывод

petrol:25
oil:83
gross:25

Я пробовал ниже код

expensesaddref=databaseReference.child(username).child(monthyr);
totaldatabaseref=databaseReference.child(username).child("Expense Cost").child(monthyr);
expensesaddref.orderByChild("expensesName").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        Log.d("Tag", "on  exp total");
        int tot=0;
        String exp = null;
        for(DataSnapshot ds:dataSnapshot.getChildren()){
            ExpenseClass expenseAdd=ds.getValue(ExpenseClass.class);
            tot+=expenseAdd.getTotal();
            exp=expenseAdd.getExpensesName();

        }
        ExpenseClass expensesAdd=new ExpenseClass(exp,tot);
        String ref= "expensescost_"+ expensesAdd.getExpensesName();
        totaldatabaseref.child(ref).setValue(expensesAdd);
        Log.d("TAG", exp + "");
        Log.d("TAG", tot + "");


        Log.d("Tag", "After exp total");

    }

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

    }
});

Я получил вывод как 0. Пожалуйста, помогитея

1 Ответ

0 голосов
/ 07 октября 2018

Вы можете использовать orderByChild(), а затем получить total дочернее значение для его суммирования.То, что я говорю, выглядит примерно так в коде:

ref.child("October_2018").orderByChild("expensesName").equalTo("oil").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for(DataSnapshot data: dataSnapshot.getChildren()){
                  int sum=0;
                  sum += data.child("total").getValue(Integer.class);  


                }

            }

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

            }
        });

Здесь ref означает DatabaseReference для вашей базы данных Firebase.

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