Mysql select in 按id排序实现方法

本文介绍了一种在MySQL中使用IN子句时,如何按照指定ID顺序返回数据的方法。通常情况下,MySQL会自动对IN子句中的ID进行升序排序。但若需按特定顺序显示结果,则可以采用FIND_IN_SET或SUBSTRING_INDEX方法实现。
有时候我们在后台选择了一系列的id,我们想安装填写id的顺序进行排序,那么就需要下面的order by方法,测试通过
 
<!--NEWSZW_HZH_BEGIN-->表结构如下:
mysql> select * from test;
+----+-------+
| id | name |
+----+-------+
| 1 | test1 |
| 2 | test2 |
| 3 | test3 |
| 4 | test4 |
| 5 | test5 |
+----+-------+

执行以下SQL:
mysql> select * from test where id in(3,1,5);
+----+-------+
| id | name |
+----+-------+
| 1 | test1 |
| 3 | test3 |
| 5 | test5 |
+----+-------+
3 rows in set (0.00 sec)

这个select在mysql中得结果会自动按照id升序排列,
但是我想执行"select * from test where id in(3,1,5);"的结果按照in中得条件排序,即:3,1,5,

想得到的结果如下:
id name
3 test3
1 test1
5 test5

请问在这样的SQL在Mysql中怎么写?
网上查到sqlserver中可以用order by charindex解决,但是没看到Mysql怎么解决??请高手帮忙,谢

谢!

select * from a order by substring_index('3,1,2',id,1);

试下这个good,ls正解。


order by find_in_set(id,'3,1,5')

谢谢,经测试order by substring_index和order by find_in_set都可以 <!--NEWSZW_HZH_END-->
### 实现 MySQL 中 Windows 文件名的中文排序 为了实现MySQL 数据库中按照类似于 Windows 的文件命名规则来处理包含中文字符的数据排序,可以采取以下几种方法: #### 方法一:转换为阿拉伯数字再排序 对于像“一、二、三…”这样的连续编号形式,在存储到数据库之前先将其映射成对应的阿拉伯数字表示法。这可以通过编写应用程序逻辑完成预处理工作;也可以利用 MySQL 用户定义函数(UDF)实现自动化的数值化操作。 ```sql SELECT id, filename, CASE WHEN filename LIKE '一%' THEN 1 WHEN filename LIKE '二%' THEN 2 ... END AS num_order FROM table_name ORDER BY IFNULL(num_order,0),filename; ``` 此 SQL 片段展示了如何基于文件名中的特定模式匹配并赋予相应的整数权重用于辅助排序[^3]。 #### 方法二:使用自然语言解析插件或外部工具 借助第三方组件如 `lib_mysqludf_preg` 正则表达式 UDF 库或其他能够识别和解释复杂字符串结构的功能模块,可以帮助更灵活地分析路径组成部分,并据此调整最终呈现次序。 #### 方法三:自定义字段保存标准化后的名称 考虑到长期维护性和性能优化需求,可以在设计表结构时增加额外列专门用来记录经过规范化处理过的版本——即将原始文本依据既定标准转化为便于计算机理解的形式(比如全部转为拼音首字母加英文描述)。这样不仅简化了后续检索流程,而且提高了查询效率。 ```sql ALTER TABLE files ADD COLUMN normalized_name VARCHAR(255); UPDATE files SET normalized_name = some_normalization_function(filename); -- 假设存在这样一个功能 SELECT * FROM files ORDER BY FIELD(normalized_name,'folder','file'),normalized_name; ``` 上述代码片段说明了通过新增一个名为 `normalized_name` 的字段来进行更为精确有序的结果展示方式[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值