Для многоязычного проекта мне нужно написать 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
автоматически? (так что с жестким кодом он)
Использовать условную агрегацию:
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;