我的sql中的状态的order by子句

时间:2012-10-07 07:12:18

标签: 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,然后是状态4,然后是状态1.如何实现以下输出

id    status
 1     3
 4     3
 2     4
 3     4
 5     1

7 个答案:

答案 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)

您可以使用FIELD在MySQL上轻松完成此操作;

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

SQLfiddle here

答案 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

Check it working on this link

答案 3 :(得分:1)

以下应该工作

 ORDER BY  CASE status WHEN 3 THEN 1
                 WHEN 4 THEN 2
                 WHEN 1 THEN 3
                 END, id asc

答案 4 :(得分:0)

使用SQL 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)
  ]);
}