2016-04-07 39 views
0

Mevcut bir MySQL tablosunu this cevabına göre çevirme sürecindeyim. Bu durumda ben menu_items uğraşıyorum ve aşağıdaki gibi benim tablo yapısı şimdi görünür: Çok dilli verilerin alınmasında bir geri dönüş uygulanması

  • menu_item_id
    • id
    • sort_position
  • menu_item_translations

    • menu_items
    • dil ENUM ('n l', 'tr')
    • etiket
    • ipucu

şimdi ben yedek olarak bir dili kullanabilmesi, öyle bir şekilde bu tabloları JOIN bir yol arıyorum diğerinin kayıtlarını ararken.

standart sorgu böyle bir şey olurdu:

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

Ama bir İngiliz menü öğesi bulunamamıştır durumunda son çare olarak 'nl' istiyoruz. Saklı prosedürlere fazla meraklı değilim, ama yapsam bunları kullanabilirim.

Çok fazla performans kaybı veya çirkinlik olmadan bu sorguda bir geri dönüş gerçekleştirmenin bir yolu var mı?

cevap

0

doğru cevap oldukça basit olduğunu bu soruyu yazdıktan sonra Gerçekleşen;

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

Bu tam olarak istediğimi yapar.