一尘不染

MySQL-IN()中的ORDER BY值

mysql

我希望按照 在IN()函数中输入的顺序 对以下查询中返回的项目进行排序。

输入:

SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C');

输出:

|   id   |   name  |
^--------^---------^
|   5    |   B     |
|   6    |   B     |
|   1    |   D     |
|   15   |   E     |
|   17   |   E     |
|   9    |   C     |
|   18   |   C     |

有任何想法吗?


阅读 310

收藏
2020-05-17

共1个答案

一尘不染

SELECT id, name
FROM mytable
WHERE name IN ('B', 'A', 'D', 'E', 'C')
ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')

函数返回字符串的剩余列表中的第一个字符串的位置。

但是,在性能上要好得多,先有一个索引列代表您的排序顺序,然后再按此列进行排序。

2020-05-17