带有一个动态列的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)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL JOIN 2 个表并分别获取两个表的总和

带有 2 个表的 SQL Server GROUP BY

排序通过3个表MYSQL

MySQL 中查询/查看表的大小限制是多少?

跨 2 个表的 Mysql SQL 查询 - 不知道如何正确执行

如何结合 3 个表的结果来计算 MySql 中的平均分?