mysql 编码分层_在MySQL中获取分层数据

bd96500e110b49cbb3cd949968f18be7.png

I want to get the details of of all child below given child in query

Eg.

If i give Level 4 or (LEVEL N) then I want to get All Details of all Level (Like L1 to L4/LN)

NiOhQ.jpg

解决方案

CREATE TABLE:

DROP TABLE IF EXISTS pctable;

CREATE TABLE pctable

(

id INT NOT NULL AUTO_INCREMENT,

parent_id INT,

PRIMARY KEY (id)

) ENGINE=MyISAM;

INSERT QUERY:

INSERT INTO pctable (parent_id) VALUES (0);

INSERT INTO pctable (parent_id) SELECT parent_id+1 FROM pctable;

INSERT INTO pctable (parent_id) SELECT parent_id+2 FROM pctable;

INSERT INTO pctable (parent_id) SELECT parent_id+3 FROM pctable;

INSERT INTO pctable (parent_id) SELECT parent_id+4 FROM pctable;

INSERT INTO pctable (parent_id) SELECT parent_id+5 FROM pctable;

SELECT * FROM pctable;

CREATE FUNCTION:

DELIMITER $$

DROP FUNCTION IF EXISTS `GetFamilyTree1` $$

CREATE FUNCTION `GetFamilyTree1` (GivenID INT) RETURNS varchar(1024) CHARSET latin1

DETERMINISTIC

BEGIN

DECLARE rv,q,queue,queue_children VARCHAR(1024);

DECLARE queue_length,front_id,pos INT;

SET rv = '';

SET queue = GivenID;

SET queue_length = 1;

WHILE queue_length > 0 DO

SET front_id = FORMAT(queue,0);

IF queue_length = 1 THEN

SET queue = '';

ELSE

SET pos = LOCATE(',',queue) + 1;

SET q = SUBSTR(queue,pos);

SET queue = q;

END IF;

SET queue_length = queue_length - 1;

SELECT IFNULL(qc,'') INTO queue_children

FROM (SELECT GROUP_CONCAT(id) qc

FROM pctable WHERE parent_id = front_id) A ;

IF LENGTH(queue_children) = 0 THEN

IF LENGTH(queue) = 0 THEN

SET queue_length = 0;

END IF;

ELSE

IF LENGTH(rv) = 0 THEN

SET rv = queue_children;

ELSE

SET rv = CONCAT(rv,',',queue_children);

END IF;

IF LENGTH(queue) = 0 THEN

SET queue = queue_children;

ELSE

SET queue = CONCAT(queue,',',queue_children);

END IF;

SET queue_length = LENGTH(queue) - LENGTH(REPLACE(queue,',','')) + 1;

END IF;

END WHILE;

RETURN rv;

END $$

DELIMITER ;

NOW FIRE SELECT QUERY:

SELECT id,GetFamilyTree1(id) FROM pctable where id = 2;

****Above Query will give child of id 2.****

After 2 days i got solution.. :-)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值