mysql查询单表树结构语句,根据父级id查询所有子类,根据子级id查询所有父类

编程入门 行业动态 更新时间:2024-10-27 18:33:45

mysql查询单表树结构语句,根据父级id查询所有<a href=https://www.elefans.com/category/jswz/34/1770793.html style=子类,根据子级id查询所有父类"/>

mysql查询单表树结构语句,根据父级id查询所有子类,根据子级id查询所有父类

数据库结构

-- 建表语句
CREATE TABLE `tree_table` (`id` int(11) NOT NULL AUTO_INCREMENT,`parent_id` int(11) DEFAULT NULL,`name` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- 插入记录
INSERT INTO `tree_table`(`id`, `parent_id`, `name`) VALUES (1, -1, '中国');
INSERT INTO `tree_table`(`id`, `parent_id`, `name`) VALUES (2, 1, '江苏');
INSERT INTO `tree_table`(`id`, `parent_id`, `name`) VALUES (3, 1, '安徽');
INSERT INTO `tree_table`(`id`, `parent_id`, `name`) VALUES (4, 2, '南京');
INSERT INTO `tree_table`(`id`, `parent_id`, `name`) VALUES (5, 3, '合肥');
INSERT INTO `tree_table`(`id`, `parent_id`, `name`) VALUES (6, 4, '玄武区');
INSERT INTO `tree_table`(`id`, `parent_id`, `name`) VALUES (7, 4, '秦淮区');

根据父级id查询所有子类

SELECT t3.*
FROM (SELECT t1.*, IF ( FIND_IN_SET( parent_id, @pids ) > 0, @pids := CONCAT( @pids, ',', id ), '0' ) AS is_childFROM tree_table AS t1,( SELECT @pids := 1 ) AS t2ORDER BY t1.id ASC
) t3
WHERE t3.is_child != '0'

语句解释:

SELECT @pids := 1

mysql中变量定义和赋值,“:=”就是赋值方式。

FIND_IN_SET(parent_id, @pids)

这个函数是:@pids中如果有parent_id的值,就返回对应的下标。

if(a > b, 1, 2)

这个是mysql中if判断语句:如果a > b成立,结果就是1,否则就是2。

CONCAT(@pids, ',', id)

这个是字符串拼接函数。

语句总结:
1、将表中所有数据都查询出来,赋予变量@pids初始值为 待查询的父级id,并按照id正序排列
2、通过if判断语句,将满足父子关系的id以逗号拼接到@pids变量并赋值给is_child,不满足条件的赋值为0;
3、再次查询t3表,将is_child=0的数据过滤掉。

根据子级id查询所有父类

SELECT t3.*
FROM (SELECT t1.*, IF ( FIND_IN_SET( id, @pids ) > 0, @pids := CONCAT( parent_id, ',', @pids ), '0' ) AS is_parentFROM tree_table AS t1,( SELECT @pids := 7 ) AS t2ORDER BY t1.id DESC
) t3
WHERE t3.is_parent != '0'

语句总结:
1、将表中所有数据都查询出来,赋予变量@pids初始值为 待查询的子级id,并按照id逆序排列
2、通过if判断语句,将满足父子关系的parent_id以逗号拼接到@pids变量并赋值给is_parent,不满足条件的赋值为0;
3、再次查询t3表,将is_parent=0的数据过滤掉。

更多推荐

mysql查询单表树结构语句,根据父级id查询所有子类,根据子级id查询所有父类

本文发布于:2024-03-06 17:18:55,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1715907.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:子类   语句   结构   mysql   单表树

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!