Autor Zpráva
Kaštan
Profil *
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
Myslím, že jste od požadovaného výsledku dál, než si myslíte. Pro jeden článek je to ještě dobrý, vybere se vše z tabulky jazyků a dle vazebních podmínek se napojí zbylá data. Pro další články to ale začíná být problém, když neexistují články, neexistují ani spojovací vazby. Jedině k tomu nějak joinovat poddotaz, který ty řádky vygeneruje.

Nemůžete to vyřešit na úrovní aplikace, zřejmě v PHP? Tam by to bylo mnohem jednodušší.
Alphard
Profil
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 *
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0