带有一个动态列的3个表的mysql查询(i18n)

问题描述 投票:0回答:1

对于多语言项目,我需要编写一个包含3个不同表的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中的语言代码? (所以用硬编码吧)

mysql sql 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;
© www.soinside.com 2019 - 2024. All rights reserved.