首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何替换MySQL枚举值进行排序

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

Stack Overflow用户
提问于 2015-09-18 04:17:09
回答 2查看 627关注 0票数 0

我有一个mysql表,其中包含一个存储元素状态的枚举字段,例如:

草稿

非活动

已发布

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

例如:

代码语言:javascript
运行
复制
SELECT state FROM records ORDER BY state ASC

将为英语、德语和法语提供以下结果:

草案»草案/ Entwurf /ébauche

无效»无效/无效/无效

发布»发布/ Freigeschaltet / Publié

由于Mysql按枚举值排序,因此在应用程序中使用此顺序会使按状态排序看起来很混乱

..。

当然,也可以使用翻译后的字符串在应用程序中按状态进行排序,但这将降低复杂性,以便能够直接在查询中执行此操作,并提高应用程序性能。

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

代码语言:javascript
运行
复制
SELECT
    CASE state
        WHEN 'draft' THEN 'Entwurf' 
        WHEN 'inactive' THEN 'Inaktiv' 
        WHEN 'published' THEN 'Freigeschaltet'
    END
FROM
    records
ORDER BY
    state ASC

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

EN

Stack Overflow用户

发布于 2015-09-18 04:31:27

也许你能得到的最快的解决方案是创建一个转换表,如下所示:

代码语言:javascript
运行
复制
TABLE myEnum
    lang VARCHAR(2)
    keyValue VARCHAR(32)
    localeValue VARCHAR(32)

然后用您对枚举的翻译填充该表,并在SQL查询的联接中使用该表:

当然,您可能不想使用这些表名或列名。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32639246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档