2016-04-07 15 views
0

Ich bin dabei, eine vorhandene MySQL-Tabelle gemäß this zu übersetzen. In diesem Fall ich bin den Umgang mit menu_items und meine Tabellenstruktur sieht nun wie folgt aus:Implementieren eines Fallback beim Abrufen mehrsprachiger Daten

  • menu_items
    • id
    • sort_position
  • menu_item_translations
    • menu_item_id
    • Sprache ENUM ('n l‘,‚en‘)
    • Label
    • Tooltip

ich jetzt nach einer Möglichkeit, diese Tabellen in einer solchen Art und Weise zu verbinden, dass ich eine Sprache als Ausweich verwenden können während der Suche nach Aufzeichnungen eines anderen.

Die Standard-Abfrage würde wie folgt sein:

SELECT 
    * 
FROM 
    menu_items mi 
INNER JOIN menu_item_translations mit 
    ON mit.menu_item_id = mi.id 
WHERE 
    mit.language = 'en'; 

Aber ich würde ‚nl‘ wie der Rückfall, falls ein englischer Menüpunkt nicht gefunden wurde zu sein. Ich bin nicht so scharf auf gespeicherte Prozeduren, aber ich kann sie verwenden, wenn ich muss.

Gibt es eine Möglichkeit, ein Fallback in dieser Abfrage zu implementieren, ohne zu viel Leistungsverlust oder Hässlichkeit?

Antwort

0

Direkt nach dem Stellen dieser Frage realisiert, dass die Antwort ziemlich einfach ist;

SELECT 
    mi.*, 
    COALESCE(mit.label, mit_fb.label) AS label 
FROM 
    menu_items mi 
LEFT JOIN menu_item_translations mit 
    ON mit.menu_item_id = mi.id 
    AND mit.language = 'en' 
LEFT JOIN menu_item_translations mit_fb 
    ON mit_fb.menu_item_id = mi.id 
    AND mit_fb.language = 'nl'; 

Das macht genau das, was ich will.

Verwandte Themen