Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否可以按照“where-in”子句中指定的顺序获取结果集?_Mysql_Sql_Sql Order By_Where In - Fatal编程技术网

Mysql 是否可以按照“where-in”子句中指定的顺序获取结果集?

Mysql 是否可以按照“where-in”子句中指定的顺序获取结果集?,mysql,sql,sql-order-by,where-in,Mysql,Sql,Sql Order By,Where In,假设有一个表雇员 mysql>从员工限制3中选择* *************************** 1. 划船*************************** 身份证号码:1 姓名:consequatur 电话:245.939.07 地址:37613 Stiedmann Vista套房077 威斯康星州伊梅尔达德港,邮编19791 *************************** 2. 划船*************************** 身份证号码:2 姓名:plac

假设有一个表雇员

mysql>从员工限制3中选择* *************************** 1. 划船*************************** 身份证号码:1 姓名:consequatur 电话:245.939.07 地址:37613 Stiedmann Vista套房077 威斯康星州伊梅尔达德港,邮编19791 *************************** 2. 划船*************************** 身份证号码:2 姓名:placeat 电话:193912-8 地址:9742 Feest Mill 275套房 马萨诸塞州北乔04371-5138 *************************** 3. 划船*************************** 身份证号码:3 姓名:非 电话:1-598-109- 地址:72476 Haley Crest 698室 伊莎贝尔堡,SD 20263-9817 假设它包含大量数据。我已经获得了想要获取数据的ID。因此,我查询并得到以下结果集

mysql>从54,2,16中的员工e中选择e.id、e.name、e.phone; +--+-------+------+ |id |姓名|电话| +--+-------+------+ |2 |地点| 193912-8| |16 |消费| 245.939.07| |54 | eum | 629.885.95| +--+-------+------+ 设置为3行0.00秒 是否可以按照id在where id in子句中出现的顺序获取结果集?因此,我所期望的是:

+--+-------+------+ |id |姓名|电话| +--+-------+------+ |54 | eum | 629.885.95| |2 |地点| 193912-8| |16 |消费| 245.939.07| +--+-------+------+ 设置为3行0.00秒 有一个排序标准,它返回54,2,16的顺序,但假设用例不要求它一直运行。我们只知道一次订单,它不太可能改变。并假设电话未编入索引


另外,请解释与每次运行查询时都必须进行表扫描和文件排序相比,此方法的性能

没有,但您可以在之后进行排序

在您的情况下,您可以简单地使用:

order by id desc
更通用的解决方案使用字段:

或加入:


fieldid,54,23,1只是id=54时的简写,然后是id=23时的简写,然后是id=1时的简写,然后是id=1时的简写,然后是3,否则连接有点复杂;以任何方式降低性能?@RaymondNijland我已经编辑了这个问题,请按fieldid添加更多clarityDoes顺序,54,23,1;以任何方式降低性能?是和否,如果这有意义,@ArunRajagopal字段应具有与CASE END->相同的性能,因为解释是相同的。。但这两种方法都需要使用filesort=quicksort的排序算法,当需要获取/排序更多记录时,这种算法的速度可能会很慢。。
select e.id, e.name, e.phone
from employee e
where id in (54, 23, 1)
order by field(id, 54, 23, 1);
select e.id, e.name, e.phone
from employee e join
     (select 54 as id, 1 as ord union all
      select 23 as id, 2 as ord union all
      select 1 as id, 3 as ord
     ) i
     on e.id = i.id
order by i.ord;