Mysql 有关my sql中状态的order by子句

Mysql 有关my sql中状态的order by子句,mysql,sql,Mysql,Sql,我正在对一个表进行排序,以显示状态为3、状态为4、状态为1的记录 在当前表中,这是输出 id status 1 3 2 4 3 4 4 3 5 1 现在当我应用查询时 select * from table order by model.status desc 输出为: id status 2 4 3 4 1 3 4 3 5 1 我想要的实际上是下面的输出。首先是状态3,然后是

我正在对一个表进行排序,以显示状态为3、状态为4、状态为1的记录

在当前表中,这是输出

id    status
 1     3
 2     4
 3     4
 4     3
 5     1
现在当我应用查询时

select * from table order by model.status desc 
输出为:

id    status
 2     4
 3     4
 1     3
 4     3
 5     1
我想要的实际上是下面的输出。首先是状态3,然后是状态4,然后是状态1。如何实现以下输出

id    status
 1     3
 4     3
 2     4
 3     4
 5     1
使用SQL
您可以使用~0来代替神奇的9999999数字,它表示大整数的最大可能值。。。应该足够了;)

其他解决方案,没有任何幻数

order by status = 1 , status
它将首先按“布尔”(0或1分贝)排序,然后按状态排序,您可以在MySQL上轻松地使用它

SELECT * 
FROM model
ORDER BY FIELD(status, 3, 4, 1);
.

以下各项应该有效

 ORDER BY  CASE status WHEN 3 THEN 1
                 WHEN 4 THEN 2
                 WHEN 1 THEN 3
                 END, id asc
如果状态值仅为1、3和4,则在order by子句中使用“”

select * from table order by FIELD( model.status 3,4,1)
如果不适合您(可能是因为MySql的旧版本),那么尝试一下这个。它会起作用的

SELECT * FROM model
ORDER BY CASE status WHEN 3 THEN 1  WHEN 4 THEN 2  WHEN 1 THEN 3
END, id

MySQL或Oracle或两者都有?请正确设置问题的格式。HTML是有限的,所以尽量不要使用它。您可以在问题文本中使用实际回报,而不是

。您还可以在输入时预览它,在您要输入的文本区域的正下方,以所见即所得的方式。谢谢。状态列中的可能值仅为1、3和4?或者其他值也可以存在?拉斐尔,它确实起作用了,谢谢...)。我会接受这个答案。@RaphaëlAlthaus只是出于兴趣,如果你知道,当你按
案例
排序时,查询排序能够使用索引吗?@JoachimIsaksson对bo诚实地说,不知道。我不明白为什么它会改变任何东西,只要我们正在处理一个索引字段,但需要一个解释查询(我没有任何MySql服务器来测试这个)。它说字段不存在。我认为这是MYSQL rite中的一个关键词?@Java_NewBie这实际上是一个至少从MYSQL 5.0开始就存在的函数,你使用的是哪个版本?@Java_NewBie我似乎记得5.0在空格方面有点敏感,试着删除空格,即,
按字段排序(状态,3,4,1)
select * from table order by FIELD( model.status 3,4,1)
SELECT * FROM model
ORDER BY CASE status WHEN 3 THEN 1  WHEN 4 THEN 2  WHEN 1 THEN 3
END, id
$invoiceList = InvoicesModel::where('hotel_id', $hotel_id)
                        ->where('status', 'PENDING')
                        ->orWhere('status', 'COOKING_PROCESS')
                        ->orderBy(
                            DB::raw('(CASE WHEN status = "COOKING_PROCESS" 
                            THEN 1 WHEN status = "PENDING"
                            THEN 2 END)')
                        )->get();