我有一个像下面这样的语句。返回的顺序是1、4、5。由于输出优先级规则,我的代码期望的顺序是4、5、1。我该如何让mysql返回我指定的顺序?
select *
from Post
where flag='0' and id in(4,5,1)
我有一个像下面这样的语句。返回的顺序是1、4、5。由于输出优先级规则,我的代码期望的顺序是4、5、1。我该如何让mysql返回我指定的顺序?
select *
from Post
where flag='0' and id in(4,5,1)
select *
from Post
where flag='0' and id in(4,5,1)
ORDER BY FIND_IN_SET(id, '4,5,1')
MySQL函数FIND_IN_SET的文档,请参见此处
尝试更明确的排序方式:ORDER BY FIELD(id,4,5,1);
SELECT * FROM Post WHERE flag='0' AND id = 4
UNION
SELECT * FROM Post WHERE flag='0' AND id = 5
UNION
SELECT * FROM Post WHERE flag='0' AND id = 1
这很低效,但它不需要你改变模式。
select *
from Post
where flag='0' and id = 4
UNION
select *
from Post
where flag='0' and id = 5
UNION
select *
from Post
where flag='0' and id = 1
如果没有使用order by子句,MySQL可以自由地以任何顺序返回结果。
您需要使用order by
指定排序方式。