Autor | Zpráva | ||
---|---|---|---|
Kaštan Profil * |
#1 · Zasláno: 30. 4. 2015, 20:32:29
Ahoj, potřebuji radu.
SELECT t1.id, t2.* FROM language t1 LEFT JOIN article_lang t2 ON t1.id = t2.language_id -- AND t2.article_id = 137 LEFT JOIN article t3 ON t3.id = t2.article_id Mám tabulku jazyků, pak tabulku článků a jejich překladů (language, article, article_lang). Založím článek, založí se mi v article a pokud se přeloží objeví se v article_lang. Nyní potřebuju výpis, abych měl k dispozici vždy články (všechny mutace i když neexistují, doplněné NULL hodnotami). Příklad. Mám 5 jazyků, 2 články (article), 1 článek bude mít 2 jazykové mutace, 2 článek jednu, tak dostanu na výstupu 10 záznamů (5 jazyků * 2 články, z toho jsou 3 reálné a 7 NULL hodnot). Je to pochopitelné? DOtaz nahoře mi téměř funguje (tedy pro 1 článek s tou podmínkou ---- AND t2.article_id = 137) ale když ji odstraním, tak se mi to nějak divně zgrupuje, asi vím čím, ale nevím jak to opravit. Nevěděl by někdo? |
||
Alphard Profil |
Nemůžete to vyřešit na úrovní aplikace, zřejmě v PHP? Tam by to bylo mnohem jednodušší. |
||
Alphard Profil |
#3 · Zasláno: 1. 5. 2015, 09:52:25
Opravuji svůj včerejší příspěvek. Použití
cross join vytvoří plný kartézský součin a na ten lze joinovat jednotlivé vazební záznamy. Nástřel je na sqlfiddle.com/#!9/49585/1. Cross join jsem dlouho nepoužil, tak jsem si to hned neuvědomil, snad se sem ještě podíváte.
|
||
Kaštan Profil * |
#4 · Zasláno: 1. 5. 2015, 13:24:09
Vypadá to dobře. V aplikační vrstvě to nejde bohužel řešit, potřeboval jsem to na úrovni DB. Vyzkouším ještě ve svém a řeknu zda OK, ale první pohled vypadá dobře. Moc děkuju Alpharde.
|
||
Časová prodleva: 10 let
|
0