2011-09-26 10 views
0

我有2代表具有這種配置:MySQL的:用於翻譯記錄連接表

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

任何想法?

+0

我沒有看到您的翻譯之間有任何關係。 – Shef

+0

'早上好''是法語裏的'Bon Jour' ....'你好嗎?'是'Comment ca va'。除此之外,你不能用標準的MySQL來做到這一點。你需要一個數據透視表來產生這個任意的轉換表,並且mysql不支持它們(儘管你可以輕鬆構建一個客戶端)。 –

+0

@Shef:id列中有一個關係。 – thir13en

回答

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 
+0

非常感謝!這真的有幫助。有沒有辦法使用相應的英文字符串填充其他語言的空白空格? – thir13en

+0

@ thir13en,作爲一個新手,當你得到一個解決方案時,點擊解決方案答案旁邊的複選標記通常是一個好習慣。它可以幫助其他人尋找類似的問題,並通知其他人解決問題,並且你不會被大量的答案認爲未解決。 – DRapp

+0

@ thir13en,請參閱COALESCE()的修訂版...如果第一個值不存在,則使用下一個... – DRapp