Minulla on MySQL-kanta, jossa on seuraavat taulut:
Sivut -- id url Sisalto -- sivu_id kieli [EN, FI, ...] otsikko sisalto
Haluaisin hakea kaikki sivut suomenkielisillä tiedoilla, jos suomenkielistä ei löydy, niin sitten englanninkielisellä (kaikista on aina englanninkielinen, mutta ei välttämättä suomenkielistä). Onnistuuko moinen yhdellä kyselyllä, vai pitääkö tämä tehdä jotenkin monimutkaisemmin?
amuse kirjoitti:
Onnistuuko moinen yhdellä kyselyllä, vai pitääkö tämä tehdä jotenkin monimutkaisemmin?
Onnistuu.
Laitetaan nyt pyytämättä esimerkkikin...
select Sivut.id, Sivut.url, coalesce(fi.otsikko, en.otsikko) otsikko, coalesce(fi.sisalto, en.sisalto) sisalto from Sivut left join Sisalto en on (Sivut.id=en.sivu_id AND en.kieli='EN') left join Sisalto fi on (Sivut.id=fi.sivu_id AND fi.kieli='FI')
Grez kirjoitti:
Laitetaan nyt pyytämättä esimerkkikin...
Kiitti, tuo coalesce onkin täysin uusi tuttavuus, vaikuttaa kätevältä.
En kuitenkaan saanut tuota toimimaan, valitaa: Unknown column 'fi.otsikko' in 'field list'. En ihan ymmärrä miten tuo left join toimii, sillä en ole käyttänyt liitoksia and -operaation kanssa.
No onko sulla Sisalto taulussa oikeasti otsikko -niminen sarake?
Äh, typo
Kiitos paljon, opin tästä paljon uutta :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.