我有一个mysql表,其中包含一个存储元素状态的枚举字段,例如:
草稿
非活动
已发布
这些状态在应用程序中被转换为用户的语言环境,由于转换可能有很大差异,因此不可能在Mysql查询中按状态对记录进行排序,因为枚举值的顺序将与转换后的字符串的顺序不匹配。
例如:
SELECT state FROM records ORDER BY state ASC
将为英语、德语和法语提供以下结果:
草案»草案/ Entwurf /ébauche
无效»无效/无效/无效
发布»发布/ 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
有没有更好/更快的方法来通过在应用程序中翻译的自定义字符串对枚举进行排序?
发布于 2015-09-18 04:29:08
您可以使用
https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function
_
字段
由于它只是一个CSV列表,您应该能够使用应用程序来传递您想要的顺序。
发布于 2015-09-18 04:31:27
也许你能得到的最快的解决方案是创建一个转换表,如下所示:
TABLE myEnum
lang VARCHAR(2)
keyValue VARCHAR(32)
localeValue VARCHAR(32)
然后用您对枚举的翻译填充该表,并在SQL查询的联接中使用该表:
当然,您可能不想使用这些表名或列名。
https://stackoverflow.com/questions/32639246
复制相似问题