我有1个包含名称和语言列的表。
我们说我有2种语言,ID为1和2 我想选择语言= 2的所有名称,如果语言= 2中没有任何行,那么我将选择具有语言1的名称。如果语言= 2不可用,则只获取语言= 1的行
ID language name(as code)
1 1 name_1
2 2 name_1
3 1 name_2
我想得到这样的东西:
ID language name
1 2 name_1
3 1 name_2
感谢您的帮助。对不起我的英文
答案 0 :(得分:1)
我认为您希望语言1(默认值)的所有行都使用语言2的值(仅当我存在时),所以:
表格:
create table `lang`
(
id int,
lang_id int,
name varchar(20),
description varchar(255)
);
一些数据:
insert into `lang` (id, lang_id, name, description) values
(1, 1, 'language', 'English'),
(2, 2, 'language', 'Português'),
(3, 1, 'title', 'My Project'),
(4, 2, 'title', 'Meu Projeto'),
(5, 1, 'var1', 'My English only variable');
查询:
select
c1.name, coalesce(c2.description, c1.description) as description
from lang c1
left join lang c2 on c1.name = c2.name and c2.lang_id = 2
where c1.lang_id = 1
结果:
name | description language | Português title | Meu Projeto var1 | My English only variable
<强> SQL Fiddle 强>
答案 1 :(得分:0)
你开车写这样的查询:
SELECT ......
FROM mytable
WHERE ........ (without languageID)
ORDER BY languageID DESC (if you want to have 2 else ASC)
LIMIT 1;
所以如果存在其他1或0
,它只会选择laguageID 2一个样本
SELECT ......
FROM mytable
WHERE ........ (without languageID)
ORDER BY ELT(languageID,'1','0','4','3');
数字IN elt是订单ID。让我们说你想让LANGUAGEid 2 AS FIRST把最低的NO IN字段2 LIKE 0
答案 2 :(得分:0)
你的答案是这样的。
select *
from t
where language = 2
union
select *
from t
where language = 1
and 0 in (select count(1)
from t
where language = 2)
第一个选择使用language = 2获取所有名称
如果没有language = 2
的任何名称,则第二个选择使用language = 1获取所有名称