猿问

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

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

在MySQL中,如何定义自定义排序顺序。


为了解释我想要的是什么,这张表:


ID  Language    Text

0   ENU         a

0   JPN         b

0   DAN         c       

1   ENU         d

1   JPN         e

1   DAN         f

2   etc...

在这里,我希望返回按语言和升序ID排序的所有行,以便Language=ENU优先,然后是JPN,最后是Dan。


结果应该是:a,d,b,e,c,f等。


这可能吗?


慕码人8056858
浏览 452回答 3
3回答

明月笑刀无情

如果只有三个值,则可以使用a 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`)

海绵宝宝撒

您可以随意选择几个选项,第一个选项是将语言改为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方法将返回更快的结果,但如果需要添加更多语言,则会更加麻烦。第三种选择是为这些语言添加一个规范化表,但是在这种情况下,这可能会造成太大的损失。
随时随地看视频慕课网APP

相关分类

MySQL
我要回答