小编典典

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

all

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

为了解释我想要的内容,请考虑这张表:

ID  Language    Text
0   ENU         a
0   JPN         b
0   DAN         c       
1   ENU         d
1   JPN         e
1   DAN         f
2   etc...

在这里,我想返回按 Language 和升序 ID 排序的所有行,以便 Language = ENU 首先出现,然后是 JPN,最后是 DAN。

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

这甚至可能吗?


阅读 69

收藏
2022-08-16

共1个答案

小编典典

MySQL 有一个方便的函数FIELD(),它非常适合这样的任务。

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

但请注意,

  1. 它使您的 SQL 的可移植性降低,因为其他 DBMS 可能没有这样的功能

  2. 当您的语言列表(或其他要排序的值)变得更长时,最好有一个单独的表,其中包含它们的 sortorder 列,并将其连接到您的查询以进行排序。

2022-08-16