我正在对表进行排序,以显示状态为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
答案 0 :(得分:4)
而不是魔法9999999号,你可以使用〜0,它代表big int的最大可能值......应该足够了;)
order by (case when status = 1 then ~0 else status end)
其他解决方案,没有任何幻数
order by status = 1 , status
首先按“布尔”(在DB中为0或1)排序,然后按状态
排序答案 1 :(得分:3)
答案 2 :(得分:3)
如果FIELD
不适合您(可能是由于MySql的旧版本),请尝试此操作。它会起作用
SELECT * FROM model
ORDER BY CASE status WHEN 3 THEN 1 WHEN 4 THEN 2 WHEN 1 THEN 3
END, id
答案 3 :(得分:1)
以下应该工作
ORDER BY CASE status WHEN 3 THEN 1
WHEN 4 THEN 2
WHEN 1 THEN 3
END, id asc
答案 4 :(得分:0)
FIELD
SELECT * FROM `table` ORDER BY FIELD (status, 3, 4, 1);
答案 5 :(得分:0)
如果状态值仅为1,3和4,则在order by子句中使用“FIELD()”。
select * from table order by FIELD( model.status 3,4,1)
答案 6 :(得分:0)
// Example if you're using hooks:
deleteDrink = (i) => {
setOrders([
...orders.slice(0, i),
...orders.slice(i + 1)
]);
}