两个特定记录和数据之间的MYSQL顺序为NULL

两个特定记录和数据之间的MYSQL顺序为NULL,mysql,sql,Mysql,Sql,有没有办法将MYSQL在特定记录中使用的默认顺序设置为NULL 我的专栏: id state try ---------------------------- 1 NULL 0 2 error 25 3 downloading 1 4 NULL 0 5 finish 2 6 error

有没有办法将MYSQL在特定记录中使用的默认顺序设置为NULL

我的专栏:

id       state          try
----------------------------
1        NULL            0
2        error           25
3        downloading     1
4        NULL            0
5        finish          2
6        error           3
7        NULL            0
8        downloading     5
9        fail            51
10       error           3
11       error           21
12       error           8
13       finish          10
14       downloading     6
15       error           17
  • id
    :id
  • 状态
    :“下载”、“错误”、“完成”、“失败”
  • try
    :尝试下载文件的次数
结果排序:

id       state          try
----------------------------
1        NULL            0
2        error           25
3        downloading     1
4        NULL            0
5        finish          2
6        error           3
7        NULL            0
8        downloading     5
9        fail            51
10       error           3
11       error           21
12       error           8
13       finish          10
14       downloading     6
15       error           17
  • 下载
  • 错误:如果在0到20之间重试
  • 空的
  • 错误:请尝试大于20的啤酒
  • 失败
我的桌子:

id       state          try
----------------------------
1        NULL            0
2        error           25
3        downloading     1
4        NULL            0
5        finish          2
6        error           3
7        NULL            0
8        downloading     5
9        fail            51
10       error           3
11       error           21
12       error           8
13       finish          10
14       downloading     6
15       error           17
运行后查询的结果:

id       state         try
-------------------------------
3        downloading     1
8        downloading     5
14       downloading     6
10       error           3
12       error           8
15       error           17
6        error           3
1        NULL            0
4        NULL            0
7        NULL            0
11       error           21
2        error           25
9        fail            51
我的查询不起作用:

 SELECT * FROM `report_table`
            WHERE state IN ('downloading', 'error','fail')
                OR state IS NULL
            ORDER BY
                CASE
                    WHEN state = 'downloading' THEN 1
                    WHEN state IS NULL THEN 2
                    WHEN state = 'error' THEN 3
                    WHEN state = 'fail' THEN 4
                    ELSE 6
                END , state ASC , try ASC

您只需按订购即可:

ORDER BY (CASE WHEN state = 'downloading' THEN 1
               WHEN state = 'error' and try between 0 and 20
               WHEN state IS NULL THEN 3
               WHEN state = 'error' THEN 4
               WHEN state = 'fail' THEN 5
               ELSE 6
          END), state ASC , try ASC
如果
状态
没有其他值,则
状态ASC
顺序中不需要

SELECT * FROM `report_table`
WHERE state IN ('downloading', 'error','fail') OR state IS NULL
ORDER BY
    CASE WHEN state = 'downloading' THEN 1
         WHEN state = 'error' AND try<=20 THEN 2
         WHEN state IS NULL THEN 3
         WHEN state = 'error' AND try>20 THEN 4
         WHEN state = 'fail' THEN 5
         ELSE 6
     END , state ASC , try ASC
样本结果为