2015-01-09 59 views
0

我有一個包含語言條款的表格。列連接以合併值

VAR | EN | ES | FR 
--------------------------- 
CR | car | coche | voiture 

默認爲英語,而且擁有所有方面,但其他一些語言,比如法國的西班牙可以有條款缺失。我需要運行一個查詢,並根據語言將這些條件轉換爲數組,但是如果該語言中的術語缺失,我需要使用相應的英文術語,而不是空白值。

我大意如下思考:

SELECT * 
FROM terms 
WHERE lang = "ES" 

但我需要所有的增值分銷商,我不看我怎麼能拉他們的方式......只要有一個心理障礙,可能需要更多的咖啡...

+0

你可以發佈缺少項目的行的示例,以及該行的預期輸出嗎?我無法想象你在找什麼。 – AdamMc331 2015-01-09 18:41:12

+0

你如何準確地得到結果?你的條款應該是1-1對應的,那麼你想要一個數組? – 2015-01-09 18:45:39

+0

@Desolator我使用簡化查詢輸出的類,並創建一個數組,但通常我需要用$ terms ['cr']替換我的內容中的實際術語。對不起,是這個問題嗎?.. – santa 2015-01-09 18:53:28

回答

2

可以使用IFNULL功能是這樣的:

SELECT var, IFNULL(es, en) FROM terms 

因此,如果es中的值爲空,則將返回en

另一種選擇是比較通用的COALESCE功能:

SELECT var, COALESCE(fr, es, en) from terms 

剛剛返回列表的第一個非空值(如果你要處理一系列的回退值)。

+0

對不起,我也需要var。不應該從條款中選擇var,COALESCE(es,en)?我喜歡這種解決方案的簡單性。 – santa 2015-01-09 19:25:25

+1

@santa是的,你的建議應該工作:) – 2015-01-09 19:42:05

1

我沒有的MySQL副本在我的面前,以檢查它,但我會嘗試:

SELECT var, 
     en, 
     CASE WHEN es IS NULL THEN en ELSE es END as 'es_or_en', 
     CASE WHEN fr IS NULL THEN en ELSE fr END as 'fr_or_en' 
FROM terms 
+0

你可以簡化爲IF(es IS NULL,en,es)'。 – Oli 2015-01-09 18:41:15

+0

更簡單:'IFNULL(es,en)' – 2015-01-09 18:41:49

+0

是的,我不知道'IFNULL'。克里斯蒂安的答案是最好的。 – 2015-01-11 13:24:29