带有一个动态列的3个表的mysql查询(i18n)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有一个动态列的3个表的mysql查询(i18n)相关的知识,希望对你有一定的参考价值。
对于多语言项目,我需要编写一个包含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
中的语言代码? (所以用硬编码吧)
答案
使用条件聚合:
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;
以上是关于带有一个动态列的3个表的mysql查询(i18n)的主要内容,如果未能解决你的问题,请参考以下文章