一尘不染

如何在MySQL中定义自定义ORDER BY顺序

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等。

这有可能吗?


阅读 274

收藏
2020-05-17

共1个答案

一尘不染

MySQL有一个方便的函数FIELD(),它非常适合执行此类任务。

ORDER BY FIELD(Language,'ENU','JPN','DAN'), ID

但是请注意,

  1. 由于其他DBMS可能没有此功能,因此它使SQL的可移植性较差

  2. 当您的语言列表(或其他要排序的值)长得多时,最好有一个带有sortorder列的单独表,然后将其加入查询中进行排序。

2020-05-17