Mysql 有关my sql中状态的order by子句
我正在对一个表进行排序,以显示状态为3、状态为4、状态为1的记录 在当前表中,这是输出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,然后是
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();