Autor Zpráva
martin88
Profil *
Ahoj,

mám takový návrh db:

data (ID, ...)
data_lng (lang_ID, data_ID, preklad)
lang (ID, ...)

A mám například aktivní jazyk češtinu ID = 2 a výchozí jazyk je angličtina ID = 1

A já potřebuju vybrat řádky z tabulky data tak, abych vybral právě aktivní překlad (tj. kde ID pro lang bude rovno 2), ale problém je v tom, že tento překlad nemusí existovat, v tom případě bych chtěl načíst výchozí jazyk, kde bude vše určitě přeloženo. Dá se to provést jedním dotazem?

Nejsem v tom moc sběhlý a tak mě napadlo to řešit dvěma dotazy, napřed jedním

SELECT d.*, dl.preklad FROM data d JOIN data_lng dl ON (d.ID = dl.data_ID) JOIN lang l ON (l.id = dl.lang_ID) WHERE l.ID = 2

pak otestuji, jestli jsem dostal nějaká data a pokud ne, použiju druhý, stejný dotaz i ID = 1 pro angličtinu.

Problém je v tom, že pokud vybírám více řádků a nějaký překlad existuje - ale ne všechny - tak jsem o nějaké záznamy ochuzen.

Můžete mi někdo poradit jak na to?

Děkuji
Kajman_
Profil *
SELECT d.*, ifnull(dl1.preklad,dl2.preklad) preklad FROM data d
LEFT JOIN data_lng dl1 ON (d.ID = dl1.data_ID AND dl1.ID = 2) -- konkretni jazyk napr. 2
LEFT JOIN data_lng dl2 ON (d.ID = dl2.data_ID AND dl2.ID = 1) -- vychozi

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