Mysql 是否可以按照“where-in”子句中指定的顺序获取结果集?
假设有一个表雇员 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的顺序,但假设用例不要求它一直运行。我们只知道一次订单,它不太可能改变。并假设电话未编入索引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
另外,请解释与每次运行查询时都必须进行表扫描和文件排序相比,此方法的性能 没有,但您可以在之后进行排序 在您的情况下,您可以简单地使用:
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;