Mysql-запрос с 3 таблицами с одним динамическим столбцом (i18n)

0

Для многоязычного проекта мне нужно написать MySQL-запрос с тремя разными таблицами.

Вот запрос:

SELECT i.i18n_id, i.name,
(select tx_translation from i18n_translation where id_locale= 'fr_be' 
and id_translation=i.i18n_id) as 'fr_be',
(select tx_translation from i18n_translation where id_locale= 'nl_be' and id_translation=i.i18n_id) as 'nl_be',
(select tx_translation from i18n_translation where id_locale= 'en_gb' and id_translation=i.i18n_id) as 'en_gb'
FROM i18n i
left join i18n_translation itrans on itrans.id_translation=i.i18n_id
group by i18n_id

Результаты в порядке, но я думаю, что subselects - это не лучший способ получить его.

Кроме того, у меня есть одна таблица, которая содержит код языков " i18n_language " со следующими столбцами (id, code, name, active). Как "1, fr_be, Français, 1".

Как я могу написать запрос без subselects и добавить языки код найден в i18n_language автоматически? (так что с жестким кодом он)

Теги:
internationalization

1 ответ

0
Лучший ответ

Использовать условную агрегацию:

select i.i18n_id, i.name,
       max(case when id_locale = 'fr_be' then tx_translation end) as fr_be,
       max(case when id_locale = 'nl_be' then tx_translation end) as nl_be,
       max(case when id_locale = 'en_gb' then tx_translation end) as en_gb
from i18n i left join
     i18n_translation itrans
     on itrans.id_translation = i.i18n_id
group by i.i18n_id, i.name;
  • 0
    Привет, Гордон, спасибо, это работает отлично, но как насчет таблицы i18n_language, которая содержит список языков?
  • 0
    @lio. , , Это в твоем вопросе?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню