Как запросить базу данных Firebase Realtime в Android ex.«ВЫБЕРИТЕ значения столбца ИЗ таблицы» - PullRequest
0 голосов
/ 24 марта 2019

Я пришел из базы данных SQL, поэтому я не знаю, возможен ли такой запрос с использованием базы данных Firebase в реальном времени.

У меня есть следующая структура в моей базе данных Firebase в реальном времени. Я пытаюсь найти способ построить запрос, по которому я могу получить список стран, в которых есть «поставщик услуг».

Используя SQL, я бы легко написал: ВЫБЕРИТЕ DISTINCT Страна ОТ адреса;

Я не хочу возвращать все объекты "сервис-провайдеров", поскольку их может быть тысячи! Я хочу только список строк, содержащих страны, и, предпочтительно, DISTINCT.

Пример: если в США есть 3 провайдера услуг, 5 в Канаде и 4 во Франции, то мой запрос вернет ["США", "Канада", Франция "].

"Service-Providers" : {
    "PUSH_ID" : {
      "address" : {
        "area" : "ddd",
        "city" : "Berlin",
        "country" : "Germany",
        "lat" : 0,
        "lng" : 0
           },
      "description" : "Shop",
      "firstName" : "fn",
      "lastName" : "ln",
      "phoneNumbers" : [ "123" ],
      "serviceCategory" : "mixed",
      "uid" : "PUSH_ID"
    }
       -
       -
       -
       -
  }

1 Ответ

2 голосов
/ 24 марта 2019

, если в США есть 3 поставщика услуг, 5 в Канаде и 4 во Франции, то мой запрос вернет ["США", "Канада", Франция "].

Нет никакого способа, которым вы можете достичь этого, используя вашу фактическую структуру базы данных, поэтому в этом случае вы должны создать объект Country и внести небольшие изменения в структуру базы данных, добавив новый узел с именем countries.узел должен выглядеть следующим образом:

Firebase-root
   |
   --- countries
         |
         --- pushedId
         |     |
         |     --- name: USA
         |     |
         |     --- providerService: 3
         |
         --- pushedId
         |     |
         |     --- name: Canada
         |     |
         |     --- providerService: 5
         |
         --- pushedId
               |
               --- name: France
               |
               --- providerService: 4

Теперь, каждый раз, когда вы добавляете новый адрес в свой узел Service-Providers, просто увеличивайте количество вашего свойства providerService на единицу. Вот и все!

Чтобы получить список стран, просто используйте следующий код:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference countriesRef = rootRef.child("countries");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> countries = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String country = ds.child("name").getValue(String.class);
            countries.add(country);
        }

        //Do what you need to do with your list
        Log.d(TAG, list.toString());
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
countriesRef.addListenerForSingleValueEvent(valueEventListener);

Выходные данные в вашем logcat будут:

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