sql >> Databáze >  >> RDS >> SQLite

Jak filtrovat jeden nebo více vztahů s android room db

Podívejme se, jak @Relation funguje. Existují dvě fáze:

  1. Místnost provede dotaz, který jste vložili do @Query získat uživatele. Jako obvykle tento dotaz neobsahuje žádné spojení. Tento dotaz se používá k získání té části dat, která jsou uložena v hlavní tabulce (User ve vašem případě).
  2. Místnost provede ještě jeden dotaz. Za tímto účelem se dívá na @Relation parametry a rozumí, na jakou tabulku by se měl dotazovat jako další (Record ve vašem případě) a jaká by měla být podmínka spojení s výsledkem uživatele. Je důležité, abyste do tohoto procesu vytváření dotazů nemohli nijak zasahovat. Nemůžete nastavit filtr na Record například pole . Získání výsledku Room jej převede do potřebného formátu (vyplní Seznam Records ).

Máte na výběr:

  1. Chcete-li obrátit vztah k nastavení filtrů na Records tabulky (ale s tím získáte plochá data bez Seznamu).
public class UserWithRecords {
    @Embedded
    protected Record record;
    @Relation(
            parentColumn = "user_id",
            entity = User.class,
            entityColumn = "id"
    )
    protected User user;
}

a změnit dotaz na:

@Transaction
@Query("SELECT * FROM record_table WHERE date=:date")
public LiveData<List<UserWithRecords>> getDailyRecord(String date);
  1. Nepoužívat @Relation vůbec, napište dotaz s připojeními, jako jste to zkusili. Ale pak byste měli ručně transformovat výsledek do potřebné formy v kódu (optimalizace výsledku a formování seznamu).



  1. sql ORDER BY více hodnot v konkrétním pořadí?

  2. 5 kroků k vytvoření marketingové databáze

  3. jak předat název tabulky jako parametr do uložené procedury?

  4. Ukládání json, jsonb, hstore, xml, enum, ipaddr atd. se nezdaří, protože sloupec x je typu json, ale výraz má proměnlivý typ