在MYSQL中按"ENUM字段"排序

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 BYENUM列上使用子句时防止出现意外结果,请使用以下技术之一:

  • 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)

(我不相信有一个设置来实现这一点,你必须提供排序值.)

  • 这种排序ENUM的方式在某些情况下非常有用!它确实有效,我试过:) (2认同)
  • 完美正是我想要的 (2认同)

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.