mysql根据子id查询所有的父节点信息 [并可根据父id查询子节点信息]

mysql根据子id查询所有的父节点信息 [并可根据父id查询子节点信息]


数据:
在这里插入图片描述

SQL如下(示例):

创建表格

CREATE TABLE `treetype` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) DEFAULT NULL,
  `fid` INT DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

数据

INSERT  INTO `treetype`(`id`,`name`,`fid`) 
VALUES (1,'电脑',0),
	   (2,'华硕',1),
       (3,'联想',1),
       (4,'戴尔',1),
       (5,'手机',0),
       (6,'苹果',5),
       (7,'华为',5),
       (8,'小米',5),
       (9,'华硕耳机',2),
       (10,'华硕耳机X系列',9),
       (11,'华为耳机',7),
       (12,'华为蓝牙耳机',11);

根据父id查询所有的子id

SELECT id,`name` FROM (
	SELECT 
		t1.id,t1.name,
		IF(FIND_IN_SET(fid, @pid) > 0,
    	@pid := CONCAT(@pid, ',', id), 0) AS childId
    FROM 
    	(
    		SELECT 
    			id,fid,`name` 
    	 	FROM treetype t 
    	 	ORDER BY fid, id
   	 	) t1,
	    (SELECT @pid := 5 ) t2) t3 
	WHERE childId != 0

根据子id查询所有的父id

SELECT T2.id,T2.name,T2.fid
FROM ( 
        SELECT 
                @r AS _id, 
                (SELECT @r := fid FROM treetype WHERE id = _id) AS parent_id, 
                @l := @l + 1 AS lvl 
        FROM 
                (SELECT @r := 11, @l := 0) vars,
                treetype h 
        WHERE @r <> 0) T1 
JOIN treetype T2 
ON T1._id = T2.id 
ORDER BY T1.lvl DESC
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值