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