IN() 函数内的 MySQL 排序
使用 IN() 子句执行查询时,可能需要对根据函数中提供的顺序返回项目。默认情况下,MySQL 不保证此顺序。
考虑以下示例:
SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C');
预期输出可能按照值输入 IN() 函数的顺序排序:
id | name |
---|---|
5 | B |
6 | B |
1 | D |
15 | E |
17 | E |
9 | C |
18 | C |
相反,MySQL 可能会应用自己的排序算法,这可能会导致不同的结果
解决方案:
为了确保所需的顺序,MySQL 提供了 FIELD() 函数。此函数接受一个字符串和一系列字符串,并返回第一个字符串在后续参数中的位置。
通过利用 FIELD(),您可以按如下方式对输出进行排序:
SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C') ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')
此查询确保按 IN() 函数中指定的顺序返回行。
性能优化:
虽然 FIELD() 函数满足所需的功能,但考虑性能影响也很重要。对于大型数据集,利用专门为排序设计的索引列可以显着提高性能。
以上是如何控制 MySQL IN() 函数中结果的顺序?的详细内容。更多信息请关注PHP中文网其他相关文章!