Как запросить таблицы для многоязычных записей с языком по умолчанию - PullRequest
1 голос
/ 10 июня 2019

У меня проблема застряла.У меня есть таблица категорий и таблица category_translate для поддержки нескольких языков.

Я хочу запрос, который может искать все категории с моим указанным языком.Если языковой записи не существует, она вернет язык по умолчанию (т.е. английский).Я много искал, но не могу найти решение.Может кто-нибудь помочь подсказать, как ее решить.

category
---------------
id

category_translate
--------------------
id
category_id
language_id
is_default
name

Кроме результата:

id   language_id      name.         is_default
------------------------------------------------
1    'en'             'Food'        1
1    'zh'             'Food-ZH'     0
2    'en'             'Cloth'       1

SELECT a.id, b.language_id, b.name, b.is_default
FROM category a, category_translate b
WHERE a.id = b.category_id AND language_id = 'zh'

id   language_id      name          is_default
------------------------------------------------
1    'zh'             'Food-ZH'     0

Вышеупомянутый запрос может получить категории с языком 'zh', но не может получить другие категории с языком по умолчанию 'en'

1 Ответ

1 голос
/ 10 июня 2019
  1. Никогда не используйте запятые в предложении FROM.
  2. Всегда используйте правильный, явный, стандартный JOIN синтаксис.
  3. Используйте значимые псевдонимы таблиц!

Вы можете решить свою проблему с помощью LEFT JOIN. На самом деле два из них:

SELECT c.id,
       COALESCE(ct.language_id, ctdefault.language_id) as language_id,
       COALESCE(ct.name, ctdefault.name) as name,
       (ct.language_id is null) as is_default
FROM category c LEFT JOIN
     category_translate ct
     ON ct.category_id = c.id AND
        ct.language_id = 'zh' LEFT JOIN
     category_translate ctdefault
     ON ctdefault.category_id = c.id AND
        ctdefault.is_default ;

Мне немного неясно, как определяется is_default. Если язык, который вы ищете , является значением по умолчанию, должно ли значение быть истинным или нет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...