Mysql:为翻译记录连接表

Mysql:为翻译记录连接表,mysql,join,Mysql,Join,我有两个具有此配置的表: table language('id', 'language_name', 'iso_code') table translation('id', 'language_id', 'translated_text') 在第一个表中,我有记录: --------------------------------- | id | language_name | iso_code | --------------------------------- | 1 | Englis

我有两个具有此配置的表:

table language('id', 'language_name', 'iso_code')
table translation('id', 'language_id', 'translated_text')
在第一个表中,我有记录:

---------------------------------
| id | language_name | iso_code |
---------------------------------
| 1  | English       | en       |
| 2  | Espanõl       | es       |
| 3  | Français      | fr       |
---------------------------------
第二个表:

--------------------------------------
| id | language_id | translated_text |
--------------------------------------
| 1  | 1           | Good Morning    |
| 2  | 1           | How are you?    |
| 1  | 2           | Buenos dias     |
| 2  | 3           | Comment ça va?  |
--------------------------------------
所有英文文本字符串都存在,但其他一些语言不存在

我想显示一个包含所有英文文本字符串和相应翻译的表格,如:

----------------------------------------
| text_id | en           | es          |
----------------------------------------
| 1       | Good Morning | Buenos dias |
| 2       | How are you? |             |
----------------------------------------


有什么想法吗?

只需继续对ID上的同一个表进行左连接,但会增加表示其语言的列

如果每个注释查询的相应列中没有值,则进行编辑以显示英语

select 
      eng.id,
      eng.translated_text InEnglish,
      coalesce( spn.translated_text, eng.translated_text ) InSpanish,
      coalesce( frn.translated_text, eng.translated_text )  InFrench
   from
      translation eng
         left join translation spn
            on eng.id = spn.id
            and spn.Language_ID = 2
         left join translation frn
            on eng.id = frn.id
            and spn.Language_ID = 3
   where
      eng.Language_id = 1
   order by 
      eng.id

我看不出你的翻译之间有任何关系。
早上好
是法语的
祝你好运
<代码>你好吗?是
评论ca va
。除此之外,标准MySQL无法实现这一点。您需要一个透视表来生成此任意转换表,而mysql不支持它们(尽管您可以在客户端轻松构建一个)。@Shef:id列中有一个关系。@MarcB:我不想用mysql转换字符串,我只想使用数据库中的转换字符串。不管怎样,德拉普给了我一个似乎完美的解决方案谢谢!这真的很有帮助。有没有办法用对应的英文字符串来填充其他语言中的空格?@thir13en,作为一个新手,当你得到一个解决方案时,通常最好单击解决方案答案旁边的复选标记。它可以帮助其他人寻找类似的问题,也可以通知其他人问题已经解决,而你不会被一大堆认为问题尚未解决的答案所击中。@Thirt13en,请参阅COALESCE()的修订。。。如果第一个值不存在,它将使用下一个。。。
select 
      eng.id,
      eng.translated_text InEnglish,
      coalesce( spn.translated_text, eng.translated_text ) InSpanish,
      coalesce( frn.translated_text, eng.translated_text )  InFrench
   from
      translation eng
         left join translation spn
            on eng.id = spn.id
            and spn.Language_ID = 2
         left join translation frn
            on eng.id = frn.id
            and spn.Language_ID = 3
   where
      eng.Language_id = 1
   order by 
      eng.id