2015-01-09 63 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