Autor | Zpráva | ||
---|---|---|---|
Waren Profil |
#1 · Zasláno: 16. 9. 2019, 14:08:56
Mám následující strukturu databáze:
Room: (id, fixed, #accounts) RoomAccount: (room_id, account_id) Account: (id) V RoomAccount mám následující: room_id | account_id 1 | 1 1 | 2 Potřebuji vybrat místnost, která je fixní a zároveň obsahuje jak 1, tak i 3. Tento dotaz mi vybere místnost 1: Doctrine Query Builder $this->getRepository(Room::class)->createQueryBuilder('e') ->where('a.id IN(1, 3)') ->innerJoin('e.accounts', 'a'); SQL SELECT * FROM Room INNER JOIN RoomAccount ON Room.id = RoomAccount.room_id INNER JOIN Account ON Account.id = RoomAccount.account_id WHERE RoomAccount_.id IN ('1', '3') AND Room.fixed = '1' Předpokládám, že budu asi muset použít subquery, ale lze to i jinak? Nevím, jak položit dotaz googlu i do nadpisu jsem nevěděl co dát... |
||
Keeehi Profil |
Waren:
Řešením je dvojitý join s tou samou tabulkou, jednou s podmínkou pro 1 podruhé pro 3. Neškáluje to ale úplně nejlépe. Pokud by těch možností bylo více, byl by to problém. Pokud by platilo, že hodnoty v rámci jednoho pokoje jsou unikátní, dala by se použít subquery select id_room from rooms where account_id IN (1,3,5,14) group by room_id having count(*) = 4 .
|
||
Kajman Profil |
Keeehi:
„Pokud by platilo, že hodnoty v rámci jednoho pokoje jsou unikátní“ Neunikátnost lze ošetřit díky distinct v countu having count(distinct account_id) = 4 |
||
Waren Profil |
#4 · Zasláno: 17. 9. 2019, 13:10:55
Keeehi: Děkuju
Kajman: FAQ sekce jsem si nevšiml, děkuju |
||
Časová prodleva: 5 let
|
0