abd*_*mir 35 mysql sql enums sql-order-by
有一个字段'noticeBy'枚举('email','mobile','all','auto','nothing')NOT NULL DEFAULT'auto'.因为已知ENUM字段的排序相对于其索引执行.但是,如何通过其价值观进行排序?
egg*_*yal 58
如排序中所述:
ENUM
值根据其索引号进行排序,这取决于列规范中列出枚举成员的顺序.例如,'b'
之前排序'a'
的ENUM('b', 'a')
.空字符串在非空字符串之前NULL
排序,值在所有其他枚举值之前排序.要
ORDER BY
在ENUM
列上使用子句时防止出现意外结果,请使用以下技术之一:
ENUM
按字母顺序指定列表.确保列按词法排序,而不是通过编码
ORDER BY CAST(col AS CHAR)
或索引编号ORDER BY CONCAT(col)
.
因此,根据第二个项目符号,您可以在将列强制转换为字符串后对其进行排序:
ORDER BY CAST(noticeBy AS CHAR)
Run Code Online (Sandbox Code Playgroud)
And*_*y G 48
这也有效:
ORDER BY FIELD(noticeBy, 'all','auto','email','mobile','nothing')
Run Code Online (Sandbox Code Playgroud)
(我不相信有一个设置来实现这一点,你必须提供排序值.)
Fab*_*ler 15
您可以根据需要定义订单:
ORDER BY CASE noticeBy
WHEN 'email' THEN 1
WHEN 'mobile' THEN 2
WHEN 'all' THEN 3
WHEN 'auto' THEN 4
ELSE 5
END
Run Code Online (Sandbox Code Playgroud)
这将按以下顺序返回行:email,mobile,all,auto,nothing.