为了账号安全,请及时绑定邮箱和手机立即绑定

如何在MySQL中按顺序定义自定义订单

如何在MySQL中按顺序定义自定义订单

慕码人8056858 2019-07-11 20:46:07
如何在MySQL中按顺序定义自定义订单在MySQL中,如何定义自定义排序顺序。为了解释我想要的是什么,这张表:ID  Language    Text0   ENU         a0   JPN         b0   DAN         c       1   ENU         d1   JPN         e1   DAN         f2   etc...在这里,我希望返回按语言和升序ID排序的所有行,以便Language=ENU优先,然后是JPN,最后是Dan。结果应该是:a,d,b,e,c,f等。这可能吗?
查看完整描述

3 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

如果只有三个值,则可以使用CASE表达:

ORDER BY `ID`,
         CASE `Language`
         WHEN 'ENU' THEN 1
         WHEN 'JPN' THEN 2
         WHEN 'DAN' THEN 3
         END

(如果可能有其他值,那么您可能需要添加一些额外的逻辑来保持排序的一致性;例如,您可以添加ELSE 4对此CASE表达式,然后按Language作为第三种排序标准:

ORDER BY `ID`,
         CASE `Language`
         WHEN 'ENU' THEN 1
         WHEN 'JPN' THEN 2
         WHEN 'DAN' THEN 3
         ELSE 4
         END,
         `Language`

)


查看完整回答
反对 回复 2019-07-11
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

您可以随意选择几个选项,第一个选项是将语言改为ENUM(假设这是可能的,并且您只需要几个变体)。

如果您指定它为ENUM('ENU','JPN','DAN')然后ORDER Language ASC将按您指定的顺序订购。

第二个案件将涉及某个地方,即

SELECT * FROM tableORDER BY CASE Language    WHEN 'ENU' THEN 3
    WHEN 'JPN' THEN 2
    WHEN 'DAN' THEN 1
    ELSE 0END DESC, ID ASC

就性能而言,ENUM方法将返回更快的结果,但如果需要添加更多语言,则会更加麻烦。第三种选择是为这些语言添加一个规范化表,但是在这种情况下,这可能会造成太大的损失。


查看完整回答
反对 回复 2019-07-11
  • 3 回答
  • 0 关注
  • 451 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信