【发布时间】:2015-09-17 20:17:08
【问题描述】:
我有一个 mysql 表,其中有一个枚举字段存储元素的状态,例如:
- 草稿
- 无效
- 已发布
这些状态在应用程序中被翻译成用户的语言环境,并且由于翻译可能有很大差异,因此无法在 Mysql 查询中按状态对记录进行排序,因为枚举值的顺序与翻译后的字符串。
例如:
SELECT state FROM records ORDER BY state ASC
将为英语、德语和法语给出以下结果:
- 草稿 » 草稿 / Entwurf / Ébauche
- inactive » Inactive / Inaktiv / Inactif
- 已出版 » 已出版 / Freigeschaltet / Publié
由于 Mysql 按枚举值排序,因此在应用程序中使用此顺序会使按状态排序看起来很混乱。
当然,之后可以在应用程序中使用翻译后的字符串按状态进行排序,但它会消除一层复杂性,以便能够直接在查询中执行此操作 - 并提高应用程序性能。
我发现的一个解决方案是在查询中使用 CASE 语句:
SELECT
CASE state
WHEN 'draft' THEN 'Entwurf'
WHEN 'inactive' THEN 'Inaktiv'
WHEN 'published' THEN 'Freigeschaltet'
END
FROM
records
ORDER BY
state ASC
是否有更好/更快的方法通过在应用程序中翻译的自定义字符串对枚举进行排序?
【问题讨论】:
-
创建一个单独的表格,其中包含每种语言的状态术语。仅在主表中存储
stateID和languageID。加入他们并ORDER BY新表中的相应字段。
标签: mysql sorting enums translation