SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Jak filtrować w relacji jeden do wielu z db pokoju Android

Zobaczmy, jak @Relation Pracuje. Istnieją dwa etapy:

  1. Pokój wykonuje zapytanie, które umieściłeś w @Query aby zdobyć użytkowników. Jak zwykle to zapytanie nie zawiera żadnych sprzężeń. To zapytanie służy do pobrania tej części danych, które są utrwalone w głównej tabeli (User w twoim przypadku).
  2. Pokój wykonuje jeszcze jedno zapytanie. W tym celu wygląda na @Relation parametry i rozumie, do jakiej tabeli powinien wykonać zapytanie (Record w Twoim przypadku) i jaki powinien być warunek dołączenia do wyniku użytkownika. Ważne jest, abyś nie miał możliwości ingerowania w ten proces tworzenia zapytania. Nie możesz ustawić filtra na Record na przykład pola 's. Pobieranie wyniku Room przekształca go w wymagany format (wypełnia Listę Records ).

Masz wybór:

  1. Aby odwrócić relację, aby ustawić filtry na Records tabela (ale dzięki temu uzyskasz płaskie dane bez listy).
public class UserWithRecords {
    @Embedded
    protected Record record;
    @Relation(
            parentColumn = "user_id",
            entity = User.class,
            entityColumn = "id"
    )
    protected User user;
}

i zmienić zapytanie na:

@Transaction
@Query("SELECT * FROM record_table WHERE date=:date")
public LiveData<List<UserWithRecords>> getDailyRecord(String date);
  1. Nie używać @Relation w ogóle napisz zapytanie z sprzężeniami, które próbowałeś. Ale wtedy powinieneś ręcznie przekształcić wynik do potrzebnej postaci w kodzie (zapętlanie wyniku i tworzenie listy).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zarządzanie danymi za pomocą Python, SQLite i SQLAlchemy

  2. SQLite JSON()

  3. Jak działa SQLite Nullif()

  4. Jak wyświetlić bieżące ustawienia poleceń kropki w SQLite?

  5. Jak działa SQLite Random()