Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL - sivujen ehdollinen sisällön haku

amuse [24.10.2012 18:33:00]

#

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?

Grez [24.10.2012 18:59:38]

#

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')

amuse [24.10.2012 19:42:17]

#

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.

Grez [24.10.2012 19:46:29]

#

No onko sulla Sisalto taulussa oikeasti otsikko -niminen sarake?

amuse [24.10.2012 19:54:22]

#

Äh, typo

Kiitos paljon, opin tästä paljon uutta :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta