在ORDER BY子句中使用FIELD() - MySQL

时间:2013-10-30 12:46:57

标签: mysql sql-order-by

这是参考Ayman Hourieh

给出的答案

问题: MySQL - ORDER BY values within IN()

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

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

因为ORDER BY 4函数返回位置,所以会像... ORDER BY 1FIELD。请解释ORDER BY在这种情况下如何运作。

1 个答案:

答案 0 :(得分:1)

对于每一行,FIELD()返回一个整数值。 然后按此值排序行。

FIELD()子句添加到选择部分应该可以帮助您了解它的工作原理:

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

示例结果集:

 4 | Z | 0
12 | B | 1
 1 | B | 1
 6 | A | 2
 3 | E | 4