如何在SELECT Mysql查询的结果中强制元素的位置? 例如,我有一个"元素"表格中有这些数据:
id| name
1 | element1
2 | element2
3 | element3
...
5 | element5
我想在第二个位置手动放置id = 5的元素:
id| name
1 | element1
5 | element5
2 | element2
...
3 | element3
通过下面的查询,我可以将元素放在第一位,但不能放在第二或第三位:
SELECT id, IF(id = 5, 1, 0) AS position
FROM elements ORDER BY position
答案 0 :(得分:1)
在不知道其他ID的情况下,我可以想到两种方式:
(select * from mytable where id <> 5 limit 1)
union all
select * from mytable where id = 5
union all
(select * from mytable where id <> 5 limit 10000000000000 offset 1)
并且
select *
from mytable
order by id = (select min(id) from mytable where id <> 5) desc,
id = 5 desc,
id asc
演示:http://rextester.com/VCVZ23881
更灵活 - 你可以把它放在任何位置:
select *
from mytable
order by id <> 5 and id < (select id from mytable where id <> 5 limit 1 offset X) desc,
id = 5 desc,
id asc;
使用X = position - 1
因此,如果您想将行放在7
位置,则需要将X
替换为6
答案 1 :(得分:0)
您可以使用按字段排序来根据字段值
分配订单SELECT * FROM mytable ORDER BY FIELD(id,1,5,2,3);