在mysql查询中强制元素的位置

时间:2017-03-20 17:27:41

标签: mysql

如何在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

2 个答案:

答案 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

演示:http://rextester.com/DMIXA59318

答案 1 :(得分:0)

您可以使用按字段排序来根据字段值

分配订单
SELECT * FROM mytable ORDER BY FIELD(id,1,5,2,3);