mysql通过在同一张表上查询的自定义顺序

Posted

技术标签:

【中文标题】mysql通过在同一张表上查询的自定义顺序【英文标题】:mysql custom order by query on same table 【发布时间】:2016-07-14 06:02:09 【问题描述】:

我有类似的数据,而且它有更多的列,不仅低于两列:

id       |  s_type
1        |  ACTIVE
2        |  PENDING
3        |  UPDATE
4        |  ACTIVE
5        |  PENDING
6        |  UPDATE

我使用了 ASC、DESC 的顺序,但我想以自定义顺序显示数据,并且我想将其显示为我的自定义顺序(不仅是升序或降序):希望首先查看所有 PENDING,然后查看所有 ACTIVE,然后查看所有 UPDATE s_type

id       |  s_type
1        |  PENDING
2        |  PENDING
3        |  ACTIVE
4        |  ACTIVE
5        |  UPDATE
6        |  UPDATE

如何用单个查询显示

【问题讨论】:

【参考方案1】:

试试这个:

SELECT *
FROM yourtable
ORDER BY field(s_type, 'PENDING', 'ACTIVE', 'UPDATE'), id

或使用CASE WHEN

SELECT *
FROM yourtable
ORDER BY CASE s_type WHEN 'PENDING' THEN 1
                     WHEN 'ACTIVE' THEN 2
                     WHEN 'UPDATE' THEN 3 END, id

【讨论】:

【参考方案2】:

我试过了,效果很好:

      SELECT * FROM mytable ORDER BY 
    s_type = 'UPDATE',
signal_status = 'ACTIVE',
signal_status = 'PENDING'

【讨论】:

以上是关于mysql通过在同一张表上查询的自定义顺序的主要内容,如果未能解决你的问题,请参考以下文章

在同一张表上定义关系 Laravel 5.3

MySQL 在同一张表上有 2 个 LEFT JOIN

自定义表上的大型查询 - 内存问题

CAML查询中的自定义排序顺序

多对多数据透视表上的自定义范围

MySQL 冷门知识之自定义变量