MySql如何按照数组顺序排序?

8

我有一个像下面这样的语句。返回的顺序是1、4、5。由于输出优先级规则,我的代码期望的顺序是4、5、1。我该如何让mysql返回我指定的顺序?

select *
from Post 
where flag='0' and id in(4,5,1)
5个回答

14
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的文档,请参见此处


不错!它似乎按照1 5 4的顺序给了我(写下来给其他人看),但是在.NET中使用.Reverse()可以解决这个问题:D - user34537
@acidzombie:你也可以按照 find_in_set(…) desc 的顺序排序。 - knittl
@knittl:奇怪的是,它不仅没有做到这一点,而且ASC和DESC在相反的顺序中得到的结果也不同。 - user34537
2
可以使用order by FIELD(id, 4,5,1)。 - ddjikic

6

尝试更明确的排序方式:ORDER BY FIELD(id,4,5,1);


0
尝试使用这个替代方案:
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

这很低效,但它不需要你改变模式。


0
一个可能的解决方案:
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

SQL 操作集合,而 MySQL 可以自由地以任何顺序返回联合查询结果(尽管通常情况下它们会按照原始顺序返回)。 - knittl
这仍然没有回答问题。 - MJB

0

如果没有使用order by子句,MySQL可以自由地以任何顺序返回结果。

您需要使用order by指定排序方式。


3
技术上讲这是正确的,但并不太有帮助。 - MJB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接