在 MySQL“IN”查询中保留序列
在 MySQL 中,“IN”运算符选择与所提供列表中的任何值匹配的记录。默认情况下,结果按照数据库排序算法定义的顺序返回,这可能并不总是与查询中指定的顺序对齐。
让我们考虑以下示例:
SELECT * FROM foo f WHERE f.id IN (2, 3, 1);
此查询旨在检索 ID 为 2、3 和 1 的记录。但是,结果通常按 ID 排序升序:
+----+--------+ | id | name | +----+--------+ | 1 | first | | 2 | second | | 3 | third | +----+--------+
为了保持查询中指定的顺序,我们需要显式地对结果进行排序。 ORDER BY FIELD() 函数可以实现此目的。
SELECT * FROM foo f WHERE f.id IN (2, 3, 1) ORDER BY FIELD(f.id, 2, 3, 1);
FIELD() 函数将一个值作为第一个参数,将值列表作为其余参数。它返回值在列表中的位置。例如,FIELD(2, 2, 3, 1) 返回 1,因为 2 是列表中的第一个值。
通过按 FIELD(f.id, 2, 3, 1) 对结果进行排序,我们指示 MySQL 首先按第一个值 (2) 对记录进行排序,然后按第二个值 (3),最后按第三个值 (1) 对记录进行排序。此顺序可确保结果按照查询中出现的顺序返回。
+----+--------+ | id | name | +----+--------+ | 2 | second | | 3 | third | | 1 | first | +----+--------+
以上是如何在 MySQL 'IN' 查询中保留值的顺序?的详细内容。更多信息请关注PHP中文网其他相关文章!