目录
FIND_IN_SET(str,strlist),strlist以逗号分割
GROUP_CONCAT
递归
这样使用的话是查找str在strlist第一次出现的位置
select FIND_IN_SET(5,"k,8,5,7,5");
下面这样查tree表,查出strlist里有str的行
select * FROM tree where FIND_IN_SET(5,pid);
比如有以下数据,id相同的都是一组的成员,想把他们是一组的组合起来显示
想到是一组的肯定是用 select id,name FROM stu GROUP BY id 分组实现,但是这样只会显示同一组的第一个,而我们是要把同一组的都显示出来。
所以想要实现我们的需求就用GROUP_CONCAT(`name`)实现
select id,GROUP_CONCAT(`name`) FROM stu GROUP BY id;
把这篇文章看不懂的说下 https://www.cnblogs.com/duanrantao/p/9359137.html
我们把数据改成简单的,再一步一步分析
SELECT
GROUP_CONCAT( id ) INTO sTempChd
FROM
t_areainfo
WHERE
FIND_IN_SET( parentId, sTempChd )> 0;
上面循环里面的查询子节点可以分步看,第一次循环下面这样的,每个parentId都去看是不是有4,有的话就显示,然后在把显示的每行id合并起来
SELECT
GROUP_CONCAT( id )
FROM
t_areainfo
WHERE
FIND_IN_SET( parentId, '4' )> 0;
无GROUP_CONCAT( id )
有GROUP_CONCAT( id )
第二次循环
SELECT
GROUP_CONCAT( id )
FROM
t_areainfo
WHERE
FIND_IN_SET( parentId, '5,6' )> 0;
所以SELECT queryChildrenAreaInfo(4);结果为$,4,5,6,65
最后查询所有子节点,上面这个方法已经把节点按照父子顺序显示出来了,所以只要显示这些结果(id)所在的数据就行
SELECT * FROM t_areainfo WHERE FIND_IN_SET(id,queryChildrenAreaInfo(4));