56,677
社区成员
发帖
与我相关
我的任务
分享
mysql> create table testdb (
-> id int primary key,
-> name varchar(10),
-> pid int
-> );
Query OK, 0 rows affected (0.17 sec)
mysql>
mysql> insert into testdb values
-> (1 ,'a',0),
-> (2 ,'a',1),
-> (3 ,'b',1),
-> (4 ,'b',2),
-> (5 ,'c',2),
-> (6 ,'c',3),
-> (7 ,'c',0),
-> (8 ,'d',0),
-> (9 ,'e',7);
Query OK, 9 rows affected (0.06 sec)
Records: 9 Duplicates: 0 Warnings: 0
mysql> set global log_bin_trust_function_creators=on ;
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter //
mysql>
mysql> CREATE FUNCTION getChildLst(rootId INT)
-> RETURNS VARCHAR(1000)
-> BEGIN
-> DECLARE sTemp VARCHAR(1000);
-> DECLARE sTempChd VARCHAR(1000);
->
-> SET sTemp = cast(rootId as CHAR);
-> SET sTempChd =sTemp;
->
-> WHILE sTempChd is not null DO
-> SELECT group_concat(id) INTO sTempChd FROM testdb where FIND_IN_SET(
id,sTempChd);
-> SET sTemp = concat(sTemp,',',sTempChd);
-> END WHILE;
-> RETURN sTemp;
->
-> END;
-> //
Query OK, 0 rows affected (0.06 sec)
mysql>
mysql> delimiter ;
mysql> select *
-> from testdb
-> where FIND_IN_SET(id,getChildLst(1));
+----+------+------+
| id | name | pid |
+----+------+------+
| 1 | a | 0 |
| 2 | a | 1 |
| 3 | b | 1 |
| 4 | b | 2 |
| 5 | c | 2 |
| 6 | c | 3 |
+----+------+------+
6 rows in set (0.01 sec)