mysql拆分字符串作为查询条件的示例代码


Posted in MySQL onJuly 07, 2022

有个群友问一个问题

mysql拆分字符串作为查询条件的示例代码

这表的ancestors列存放的是所有的祖先节点,以,分隔

例如我查询dept_id为103的所有祖先节点,现在我只有一个dept_id该怎么查

然后我去网上找到这样一个神奇的sql,改改表名就成了下面的这样

SELECT
		substring_index( substring_index( a.ancestors, ',', b.help_topic_id + 1 ), ',',- 1 ) AS shareholder 
	FROM
		sys_dept a
		JOIN mysql.help_topic b ON b.help_topic_id < ( length( a.ancestors ) - length( REPLACE ( a.ancestors, ',', '' ) ) + 1 ) 
	WHERE
	dept_id = 103

mysql拆分字符串作为查询条件的示例代码

嗯,没错结果出来了,然后我就很好奇,什么原理,一个个来看

mysql.help_topic

这个是一个mysql自带的帮助解释注释表,查询结果如下

mysql拆分字符串作为查询条件的示例代码

id从0开始,我这个版本最大id到584,版本不同应该id最大值也不一样,这个表的作用一会说

REPLACE

这个函数应该都知道吧,替换字符用的

mysql拆分字符串作为查询条件的示例代码

LENGHT

获取字符串的长度

mysql拆分字符串作为查询条件的示例代码

substring_index

查分字符串,三个参数,要拆分的字符串,根据拆分的字符,从第几个开始

如果最后的那个参数为正数则从左开始数,然后获取对应下标左边的所有字符

如果为负数,则从右边开始数,获取对应下标右边的所有字符串,这个就不演示了

mysql拆分字符串作为查询条件的示例代码

分析

mysql拆分字符串作为查询条件的示例代码

先来看第一段

( length( a.ancestors ) - length( REPLACE ( a.ancestors, ',', '' ) ) + 1 )

我们假设当前数据的ancestors值为 0,100,101 那么第一个length(a.ancestors)的值就是9 减去后面的一段

length( REPLACE ( a.ancestors, ',', '' ) ) 因为我们假设的值里面有两个 , 所以length为7 最后在加1 那么这段值为 3

和前面的 join on条件能查出的数据也就是mysql.help_topic这个表中所有id小于3的数据,也就是id为0,1,2的三条数据

那么现在先来看看这样查询的结果是啥

mysql拆分字符串作为查询条件的示例代码

那么我们假设现在是第一行,mysql.help_topic表中的help_topic_id为0

substring_index( substring_index( a.ancestors, ',', b.help_topic_id + 1 ), ',',- 1 )

最里面的substring_index 拆分后为0,因为没有能在拆分的了所以外面的substring_index返回的也是0

第二行help_topic_id为1的时候获取结果为0,100

然后执行外层的substring_index 根据,拆分,值为-1 所以从右边找一位,获取的值就是100

第三行结果为0,100,101,外层substring_index 执行后结果为101

....只能心中大喊牛逼

那么现在知道mysql.help_topic这个表的作用了吗?就是用来对拆分出的数据分行,专业点叫笛卡尔积 (真的不懂..)

这种方法也有缺点:就是拆出的行数不能大于mysql.help_topic这个表的数据条数

到此这篇关于mysql拆分字符串作为查询条件的示例代码的文章就介绍到这了,更多相关mysql拆分字符串查询内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL复制问题的三个参数分析
Apr 07 MySQL
正确使用MySQL update语句
May 26 MySQL
Navicat for MySQL的使用教程详解
May 27 MySQL
一篇文章看懂MySQL主从复制与读写分离
Nov 07 MySQL
MySQL常见优化方案汇总
Jan 18 MySQL
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
Jan 22 MySQL
MySQL中B树索引和B+树索引的区别详解
Mar 03 MySQL
Mysql超详细讲解死锁问题的理解
Apr 01 MySQL
mysql 8.0.27 绿色解压版安装教程及配置方法
Apr 20 MySQL
MySQL数据库 任意ip连接方法
May 20 MySQL
MySql中的json_extract函数处理json字段详情
Jun 05 MySQL
mysql幻读详解实例以及解决办法
Jun 16 MySQL
mysql全面解析json/数组
Jul 07 #MySQL
Mysql表数据比较大情况下修改添加字段的方法实例
MySQL外键约束(Foreign Key)案例详解
Jun 28 #MySQL
MySQL主从切换的超详细步骤
Jun 28 #MySQL
浅谈MySql update会锁定哪些范围的数据
Jun 25 #MySQL
MySQL导致索引失效的几种情况
Jun 25 #MySQL
Mysql中的触发器定义及语法介绍
Jun 25 #MySQL
You might like
随时给自己贴的图片加文字的php代码
2007/03/08 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
关于javascript 回调函数中变量作用域的讨论
2009/09/11 Javascript
js 字符串转化成数字的代码
2011/06/29 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
浅谈JavaScript字符集
2014/05/22 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
jQuery在线选座位插件seat-charts特效代码分享
2015/08/27 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
JavaScript中三种常见的排序方法
2017/02/24 Javascript
Node.js中 __dirname 的使用介绍
2017/06/19 Javascript
JS中精巧的自动柯里化实现方法
2017/12/12 Javascript
JavaScript实现创建自定义对象的常用方式总结
2018/07/09 Javascript
ES10 特性的完整指南小结
2019/03/04 Javascript
vue实现微信分享链接添加动态参数的方法
2019/04/29 Javascript
vue监听dom大小改变案例
2020/07/29 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
python正则表达式抓取成语网站
2013/11/20 Python
快速排序的算法思想及Python版快速排序的实现示例
2016/07/02 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
教师求职推荐信范文
2013/11/20 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
运动会演讲稿50字
2014/08/25 职场文书
信用卡工资证明格式
2014/09/13 职场文书
导游词欢迎词
2015/02/02 职场文书
写好求职信的技巧解密
2019/05/14 职场文书
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
MySQL连接控制插件介绍
2021/09/25 MySQL
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
2021/10/16 Python
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA
大脑的记忆过程在做数据压缩,不同图形也有共同的记忆格式
2022/04/29 数码科技
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL