2016-04-07 4 views
0

Я выполняю перевод существующей таблицы MySQL в соответствии с ответом this. В данном случае я имею дело с menu_items, и моя структура таблицы выглядит следующим образом:Реализация резервной копии в получении многоязычных данных

  • menu_items
    • ID
    • sort_position
  • menu_item_translations
    • menu_item_id
    • язык ENUM ('n л»,„ан“)
    • этикетка
    • подсказки

Я теперь ищу способ соединить эти таблицы таким образом, что я могу использовать один язык в качестве запасного варианта при поиске записей другого.

Стандартный запрос будет что-то вроде этого:

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

Но я хотел бы «п», чтобы быть запасным вариантом в случае, если пункт меню английского не был найден. Я не слишком увлечен хранимыми процедурами, но могу использовать их, если нужно.

Есть ли способ реализовать резервную копию в этом запросе, не слишком большой потери производительности или уродства?

ответ

0

Реализовано сразу после отправки этого вопроса, что ответ довольно прост;

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

Это делает именно то, что я хочу.