Hallo nochmal!
Ich dachte, IF() sei mein Freund - entworfen habe ich folgendes SQL:
SELECT IF(
text__general_en.text= NULL, (SELECT
textFROM text__general_de WHERE
id= "foo"), (SELECT
textFROM text__general_en WHERE
id= "foo"))
Ich habe an diesem Ansatz noch ein wenig herumgewerkelt. Nach ein klein wenig nachdenken ist mir klar geworden, dass das Problem, dass text\_\_general\_en.text
nicht bekannt ist, eigentlich ja ganz einfach zu lösen ist. Schließlich kann ich an dieser Stelle ja auch einfach ein SELECT schreiben und den gewünschten Wert ermitteln:
SELECT IF(
((SELECT `text` FROM `text__general_en` WHERE `id` = "foo") = NULL),
(SELECT `text` FROM `text__general_de` WHERE `id` = "foo"),
(SELECT `text` FROM `text__general_en` WHERE `id` = "foo")
)
AS `text`
Soweit so gut - oder nicht. Denn die Prüfung auf = NULL scheint so nicht zu stimmen. Jedenfalls erhalte ich nicht die gewünschten Werte. Daraufhin habe ich ein wenig herumgestochert und wild mit Werten wie true und false herumgetestet. Was dabei herauskam funktioniert zwar, ist aber unlogisch:
SELECT IF(
((SELECT `text` FROM `text__general_en` WHERE `id` = "foo") = false),
(SELECT `text` FROM `text__general_en` WHERE `id` = "foo"),
(SELECT `text` FROM `text__general_de` WHERE `id` = "foo")
)
AS `text`
Mit diesem SQL erhalte ich:
- text.text__general_en wenn dieses nicht NULL ist
- text.text__general_de wenn text.text__general_en NULL ist
Das will ich. Allerdings scheint es mir eher zufällig, dass ich das bei meinem SQL auch bekomme. Denn immerhin sollte ich ja eigentlich (laut SQL) text__general_en.text bekommen, wenn dieses false ist.
Ich denke, das Problem ist, dass ich die Bedingung nicht korrekt formuliere. Kann mir jemand verraten, wie ich die Bedingung abändern muss, damit ich text__general_en.text bekomme, wenn dieses nicht NULL ist und ich text__general_de.text bekomme, wenn text__general_en.text NULL ist (unabhängig von text__general_de.text)?
Grüße,
Claudius