2017-05-23 51 views
2

我需要执行特定的SQL查询。 例如,我们有一个表名为people这个表有这样的记录:Sql - 按特定顺序选择

- João (id ->1) 
- Telmo (id ->2) 
- Maria (id ->3) 
- Henrique (id ->4) 
- Pedro (id ->5) 

我会获得一个特定的人,例如我得到henrique id 4选择了给我看这个名单:

- Henrique 
- Maria 
- Telmo 
- João 
- Pedro 

而且我还需要做相反的订单

- Henrique 
- Pedro 
- João 
- Telmo 
- Maria 

我该怎么做?

谢谢

回答

0

使用

select `name` from `table_name` order by find_in_set(id,'4,3,2,1,5'); 

,并得到逆列表,使用:

select `name` from `table_name` order by find_in_set(id,'4,5,1,2,3'); 
2

使用CASE WHEN检查名称:

select name 
from mytable 
order by case when name = 'Henrique' then 1 else 2 end, id; 

而且的当然

select name 
from mytable 
order by case when name = 'Henrique' then 1 else 2 end, id desc; 

为与亨里克相反的顺序仍然第一。

如果你的ID,而不是名称,然后

order by case when id = 4 then 1 else 2 end, id [desc]; 
+0

我没有得到正确的 清单。 @ThorstenKettner – user3242861

+0

如果我把id <= 4工作正常!谢谢@ThorstenKettner – user3242861

+0

为什么'<= 4'?我以为只有ID ** = ** 4才会被特别对待。 –

1

您可以使用UNION运营商把所有的人< =该ID和所有的人> ID,例如:

SELECT name FROM table WHERE id >= 4 ORDER BY id DESC 

UNION 

SELECT name FROM table WHERE id > 4 ORDER BY id 
0

你可以只添加关闭ORDER BY name,如果你想查询谁在你的名字从你的第一个字母的递减顺序的结果