ORDER BY “ENUM field” in MYSQL

為{幸葍}努か 提交于 2019-11-27 19:19:38

As documented under Sorting:

ENUM values are sorted based on their index numbers, which depend on the order in which the enumeration members were listed in the column specification. For example, 'b' sorts before 'a' for ENUM('b', 'a'). The empty string sorts before nonempty strings, and NULL values sort before all other enumeration values.

To prevent unexpected results when using the ORDER BY clause on an ENUM column, use one of these techniques:

  • Specify the ENUM list in alphabetic order.

  • Make sure that the column is sorted lexically rather than by index number by coding ORDER BY CAST(col AS CHAR) or ORDER BY CONCAT(col).

Per the second bullet, you can therefore sort on the column after it has been cast to a string:

ORDER BY CAST(noticeBy AS CHAR)

This also works:

ORDER BY FIELD(noticeBy, 'all','auto','email','mobile','nothing')

(I don't believe that there is a setting to achieve this, you have to provide the sort-values.)

You can define your order however you wish:

ORDER BY CASE noticeBy
           WHEN 'email' THEN 1
           WHEN 'mobile' THEN 2
           WHEN 'all' THEN 3
           WHEN 'auto' THEN 4
           ELSE 5
         END

This will return the rows in the following order: email, mobile, all, auto, nothing.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!