3在mysql order by排序中,大多数情况下仅使用默认排序规则就够了:字符串按字典顺序,数字按大小等等。可有时候,某个字段是有自身业务含义的,比如 type(1,2,3)可能表示早/中/晚,如果我想把中午信息靠前,这时候普通的升降序排列就不好办了。
field(column,value1,value2,value3,……)是解决这种问题的利器。
column代表要排序的列,value1…… 代表自定义的顺序:order by field(type,2,3,1)
就是按2在前,3次之,1最后的顺序来排。。ok,type=2的结果靠前了。
当然,如果排序列是字符串类型的,也可以按此逻辑,至于其他类型,自己探索去吧
SELECT
warn.*
FROM
b_warning AS warn
WHERE
warn.warn_grade != '正常'
ORDER BY
FIELD(
warn.warn_grade,
'一级预警',
'二级预警',
'三级预警'
)