如何替换MySQL枚举值进行排序

永恒的永恒

我有一个带有枚举字段的mysql表,该枚举字段存储元素的状态,例如:

  • 草稿
  • 不活跃
  • 已发表

这些状态将转换为应用程序中用户的语言环境,并且由于转换可能会有很大差异,因此无法按Mysql查询中的状态对记录进行排序,因为枚举值的顺序将与转换后的字符串的顺序不匹配。

例如:

SELECT state FROM records ORDER BY state ASC

对于英语,德语和法语,将给出以下结果:

  1. 草案»草稿/设计/编辑
  2. 无效»无效/无效/无效
  3. 出版»已出版/ Freigeschaltet /已出版

当Mysql按枚举值排序时,在应用程序中使用此顺序使按状态排序似乎变得混乱

当然,以后可以在应用程序中使用转换后的字符串按状态进行排序,但是这样做将消除一层复杂性,使其能够直接在查询中执行此操作-并提高了应用程序性能。

我发现的一种解决方案是在查询中使用CASE语句:

SELECT
    CASE state
        WHEN 'draft' THEN 'Entwurf' 
        WHEN 'inactive' THEN 'Inaktiv' 
        WHEN 'published' THEN 'Freigeschaltet'
    END
FROM
    records
ORDER BY
    state ASC

是否有更好/更快的方法通过应用程序中翻译的自定义字符串对枚举进行排序?

溢价

您可以使用 ORDER BY FIELD(state, opt1, opt2, opt3....)

https://dev.mysql.com/doc/refman/5.0/zh-CN/string-functions.html#function_field

由于它只是一个CSV列表,因此您应该能够使用该应用程序传递所需的订单。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章