4

This is a screen shot of my firebase: enter image description here I am trying to retrieve the highest 100 score in firebase database I am using this code to add new node to firebase:

 Map<String, String> post1 = new HashMap<String, String>();
        post1.put("name",name);
        post1.put("score",score);
        myRef.push().setValue(post1);

And this is the code I am using to retrieve the highest 100 score which doesn't work (the code works but it is not retrieving the highest 100 score)

 Query queryRef = myRef.orderByChild("score").limitToFirst(100);
        queryRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                    Score score=postSnapshot.getValue(Score.class);
                    Log.d("test"," values is " + score.getName()  + " " + score.getScore());
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        }); 
Elydasian
  • 2,016
  • 5
  • 23
  • 41
has19
  • 1,307
  • 16
  • 31
  • It's better to store scores as number instead of strings. Check out the comments on frank's answer for more info. – André Kool Sep 15 '16 at 11:37

2 Answers2

8

Firebase queries are always in ascending order. So you'll need to get the last 100, instead of the first 100.

Query queryRef = myRef.orderByChild("score").limitToLast(100);

Then client-side you'll need to reverse the items.

Alternatively you can add a inverted property to your items invertedScore: -99. If you do that, you can order by that inverted score and won't have to reverse the array.

This scenario has been covered frequently before. I highly recommend you study some of these:

Community
  • 1
  • 1
Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
  • 1
    I'm wondering if this will actually work because in the question the scores are strings and not numbers. Won't it sort something like this: "1", "12", "2", "3", "33", "333", "4"? – André Kool Sep 14 '16 at 14:29
  • Darn.... good catch André. Apparently I have a blind spot, because I swear I checked whether they were stored as number. **The above will indeed only work if you store the scores as number (or as zero-padded strings)**. – Frank van Puffelen Sep 14 '16 at 15:00
0

this is a way to fetch highest salary from firebas
or get highest number from firebase

one   citiesRef.orderBy("name").limit(3);
two   citiesRef.orderBy("name", "desc").limit(3);
three citiesRef.where("population", ">", 100000).orderBy("population").limit(2);
four  citiesRef.where("population", ">", 100000).orderBy("population");

Adnan Bashir
  • 645
  • 4
  • 8