前言
查询一张无限极表 父子ID
SQL
不包含父类
SELECT A.*
FROM (SELECT * FROM sixs_organization_manage) A,
(SELECT @pv := 1) B
WHERE find_in_set(A.som_parent_id, @pv)
AND length(@pv := concat(@pv, ',', som_id));
释义
-- find_in_set() 查询当前字符串 在目标字符串中位置 没有返回0 第一位返回1
select find_in_set('A', 'A,B,C');
-- concat() concat()函数用于将多个字符串连接起来,形成一个单一的字符串
select concat('A', ',', 'A,B');
-- A,AB
-- length() 获取长度
select length('ABC');
包含顶级父类
其实就是单独查询顶级父类然后关联子查询即可
select * from A where id=1
union
递归SQL
问题
- 效率问题 find_in_set 影响递归快慢
- 主键问题 ID加主键