mysql in 排序 也可以按in里面的顺序来排序

SQL: select * from table where id IN (3,9,6);
这样的情况取出来后,其实,id还是按3,6,9,排序的,但如果我们真要按IN里面的顺序排序怎么办?SQL能不能完成?是否需要取回来后再foreach一下?
其实可以这样
sql: select * from table where id IN (3,9,6) order by field(id,3,9,6);
出来的顺序就是指定的(3,6,9)顺序了
关于这种排序的效率,
有文章指出:
FIELD(str,str1,str2,str3,…)
Returns the index (position) of str in the str1, str2, str3, … list. Returns 0 if str is not found.
排序过程:把选出的记录的 id 在 FIELD 列表中进行查找,并返回位置,以位置作为排序依据。
这样的用法,会导致 Using filesort,是效率很低的排序方式。除非数据变化频率很低,或者有长时间的缓存,否则不建议用这样的方式排序。
使用explain测试会导致using filesort。
建议在程序代码中自行排序。

时间: 2024-10-06 07:00:14

mysql in 排序 也可以按in里面的顺序来排序的相关文章

mysql in 排序问题:可以按in里面的顺序来排序

mysql in 排序问题是一个问题,但是在遇到问题的时候就发现问题了,有时候不是外面想要的东西.譬如,有个场景,一个几万条记录的表,主键是 id,我想从表中取 id 为 30,20,80,40 的几条记录. 注意,30,20,80,40,是我预期的顺序,我希望 MySQL 按这样的我提供ID顺序返回记录. 于是我这样写 SQL: SELECT * FROM my_table WHERE id IN (30, 20, 80, 40); 结果是,他没有按我给的顺序返回. 怎么办? 查到了 FIEL

Mysql 分别按月, 日为组group,进行统计排序order

在数据库中我们经常用sql语句对表进行简单的统计排序,对于日期字段,我们可以简单的对其进行order.对于复杂一点的可以按日期中的年,月,日分别进行group,order. 按年份进行group,统计排序: SELECT YERA(established_time) ,COUNT(*) AS num <span style="font-size: 13.75px; font-family: Arial, Helvetica, sans-serif;">FROM `table

MySQL查询in操作 查询结果按in集合顺序显示_Mysql_脚本之家

body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;

mysql第四篇--SQL逻辑查询语句执行顺序

mysql第四篇--SQL逻辑查询语句执行顺序 一.SQL语句定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <having_condition&g

Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看 8种排序之间的关系: 1.直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2]

oracle按照指定顺序进行排序

之前在网上查了下按照指定顺序进行排序的方法,根据charindex来处理排序,但是在oracle发现不行,因为oracle没有charindex函数,然后使用instr代替了charindex,然后又在网上搜了另外一种方 实验如下: 1.新建表CREATE TABLE BR_DICT( ID number PRIMARY KEY NOT NULL, D_ITEM VARCHAR2(32), D_VALUE VARCHAR2(32), D_TYPE VARCHAR2(32), D_SORT num

oracle按照in的顺序进行排序

oracle按照in的顺序进行排序 select * from table_name where id in (1,3,7) order by case id when 1 then 1 when 3 then 2 when 7 then 3 end;

SQL按指定文字顺序进行排序(中文或数字等)

在有些情况下我们需要按指定顺序输出数据,比如选择了ID in(3,1,2,5,4)我们希望按这个3,1,2,5,4的顺序输出,这样只使用order by ID是无法实现的, 但是我们可以使用order by charindex(','+convert(varchar,ID)+',',',3,1,2,5,4,')的方法来实现这个目的.举例如下: Create Table info( ID int identity(1,1) not null, title varchar(100) not null

#排序算法#【2】直接插入排序、希尔排序

直接插入排序法 插入排序的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后移动,为最新元素提供插入空间. 核心代码: //直接插入排序法 void InsertSort(int a[],int n){ int i,j,k,t; for(i = 1 ; i<n;i++){ k = a[i]; /* 第一次比较粗糙的写法 j = i-1; while(