Mysql将字符串按照指定字符分割的正确方法


Posted in MySQL onMay 30, 2022

前言

在某些场景下(比如:用户上传文件或者图片等),一般的做法是将文件信息(文件名,文件路径,文件大小等)保存到文件表(user_file)中,然后再将用户所有上传的文件的id用一个指定字符拼接然后存在表(user)中某个字段里(假设是:file_ids)。
在展示用户上传的文件时就直接查询文件表中就好了:

-- 一般的语句是这样的,假设用户唯一键是id
select * from file where id in(select file_ids from user where id = 1);

sql语句没有问题,文件也能查询出来,但是,上传的文件大于1个后,再用这个sql语句查询就只返回1条记录了,可能就会疑惑了,为什么只返回一条记录???;

肯定有人做过这样的验证

-- 先运行下面这个sql,正确返回1,2,3 假设上传的文件id是1,2,3;
select file_ids from user where id = 1
-- 然后返回的文件id写死在sql语句中,运行成功返回3条记录
select file_ids from user where id in ('1' , '2' , '3');
-- 最后再整体试了下,结果返回一条......
select * from file where id in(select file_ids from user where id = 1)

-- 然后可能会想到:我把in里面的拼接成'1','2','3',这样总可以了吧?
select * from file where id in (select concat('\'', replace(file_ids,',','\',\'') ,'\'') from user where id = 1);
-- concat('\'', replace(file_ids,',','\',\'') ,'\'') 确实能拼接成上面说的形式,但是结果还是只有一条

是因为这个查询只返回一个字段,所以只会返回一条记录(即使有多个逗号拼接,或者是手动拼接的,Mysql只认为是一个值,具体底层不清楚…),正确做法如下:

一:分两次查询(不是本文重点,但可以实现)

select file_ids from user where id = 1

select file_ids from user where id in ('1' , '2' , '3');
或者
select file_ids from user where find_in_set(id , '1,2,3');

二:将file_ids字段分割成多列,类似Mysql的行转列

与Mysql行转列区别:行转列要知道列的内容,而这个不用,只需知道拼接的字符就行了

-- 下面语句将会把1,2,3,4一个字段转换成四行,依次是1,2,3,4
SELECT
	a.id,
	a.file_ids,
	substring_index(
		substring_index(
			a.file_ids,
			',',
			b.help_topic_id + 1
		),
		',' ,- 1
	) file_id
FROM
	user a
JOIN mysql.help_topic b ON b.help_topic_id < (
	length(a.file_ids) - length(REPLACE(a.file_ids, ',', '')) + 1
)
where id = 1
;
-- 然后将上面语句写在in()里面就行了,写在in()里面的话记住只能查询一个字段哦!

上面语句可以直接复制过去,只需将a表及a表字段换成自己的表明及字段就行了,至于mysql.help_topic,是Mysql自带的,不用管的。

附:mysql如何将字符串按分隔符拆分

1.字符串拆分: SUBSTRING_INDEX(pressure 136/70 血压),例如:

SUBSTRING_INDEX(pressure ,',',1)     #截取第一个逗号(,)号以前的字符串
SUBSTRING_INDEX(pressure ,',',-1)    #截取倒数第一个逗号(,)号以后的字符串

2.替换函数:replace( str, from_str, to_str)。例如:

UPDATE bgs_building_copy1 SET `name`=replace(`name`,'=',"");    #替换等号为空字符串

总结

到此这篇关于Mysql将字符串按照指定字符分割的文章就介绍到这了!

MySQL 相关文章推荐
MySQL 数据恢复的多种方法汇总
Jun 21 MySQL
MySQL高速缓存启动方法及参数详解(query_cache_size)
Jul 01 MySQL
一篇文章带你深入了解Mysql触发器
Aug 02 MySQL
MySQL约束超详解
Sep 04 MySQL
mysql如何能有效防止删库跑路
Oct 05 MySQL
mysql事务对效率的影响分析总结
Oct 24 MySQL
全面盘点MySQL中的那些重要日志文件
Nov 27 MySQL
解决MySQL添加新用户-ERROR 1045 (28000)的问题
Mar 03 MySQL
MYSQL优化之数据表碎片整理详解
Apr 03 MySQL
浅谈MySql update会锁定哪些范围的数据
Jun 25 MySQL
mysql sock文件存储了什么信息
Jul 15 MySQL
mysql序号rownum行号实现方式
Dec 24 MySQL
MySQL数据库安装方法与图形化管理工具介绍
MySQL数据库简介与基本操作
May 30 #MySQL
Mysql数据库事务的脏读幻读及不可重复读详解
May 30 #MySQL
mysql字段为NULL索引是否会失效实例详解
May 30 #MySQL
MYSQL如何查看操作日志详解
sql查询语句之平均分、最高最低分及排序语句
May 30 #MySQL
mysql5.5中文乱码问题解决的有用方法
You might like
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
非常实用的PHP常用函数汇总
2014/12/17 PHP
php根据日期显示所在星座的方法
2015/07/13 PHP
收藏一些不常用,但是有用的代码
2007/03/12 Javascript
js 字符串操作函数
2009/07/25 Javascript
JS 文件大小判断的实现代码
2010/04/07 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
2016/02/25 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
详解Vue-基本标签和自定义控件
2017/03/24 Javascript
详解JS中的柯里化(currying)
2017/08/17 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
Node.js对MongoDB进行增删改查操作的实例代码
2019/04/18 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
[04:41]2014DOTA2国际邀请赛 Liquid顺利突围晋级正赛
2014/07/09 DOTA
Python多线程实例教程
2014/09/06 Python
python利用beautifulSoup实现爬虫
2014/09/29 Python
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
关于python的bottle框架跨域请求报错问题的处理方法
2017/03/19 Python
python rsa 加密解密
2017/03/20 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
解决python nohup linux 后台运行输出的问题
2018/05/11 Python
为什么Python中没有&quot;a++&quot;这种写法
2018/11/27 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
python Elasticsearch索引建立和数据的上传详解
2019/08/04 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
MySQL锁机制
2021/04/05 MySQL