代码之家  ›  专栏  ›  技术社区  ›  lio

具有三个表和一个动态列的Mysql查询(i18n)

  •  -1
  • lio  · 技术社区  · 6 年前

    对于一个多语言项目,我需要用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\u be,Fran§ais,1”。

    如果没有 子选择项 并添加在中找到的语言代码 i18n\u语言 自动地(因此,使用硬代码it)

    1 回复  |  直到 6 年前
        1
  •  0
  •   Gordon Linoff    6 年前

    使用条件聚合:

    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;