两个特定记录和数据之间的MYSQL顺序为NULL
有没有办法将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
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
:idid
:“下载”、“错误”、“完成”、“失败”状态
:尝试下载文件的次数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
样本结果为