Mysql:连接表以获取翻译记录

时间:2011-09-26 15:55:01

标签: mysql join

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

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? |             |
----------------------------------------

-------------------------------------------
| text_id | en           | fr             |
-------------------------------------------
| 1       | Good Morning | Comment ça va? |
| 2       | How are you? |                |
-------------------------------------------

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

继续对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