一、数据库类:
1.建表:
CREATE TABLE `dept` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `deptid` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
数据:
INSERT INTO `dept` VALUES ('1', '语音业务部', null); INSERT INTO `dept` VALUES ('2', '小云AI', '1'); INSERT INTO `dept` VALUES ('3', '云客宝', '1'); INSERT INTO `dept` VALUES ('4', '流量业务部', null); INSERT INTO `dept` VALUES ('5', 'MIFI', '4'); INSERT INTO `dept` VALUES ('6', '物联网卡', '4');
查询业务部下所有的子部门:
SELECT b.* FROM dept a INNER JOIN dept b ON a.id = b.deptid WHERE a.id = 1
二、 数据库函数类:
delimiter / DROP FUNCTION IF EXISTS `mydb`.`getChild`/ CREATE FUNCTION `getChild`(rootId varchar(36)) RETURNS VARCHAR(1000) BEGIN DECLARE ptemp VARCHAR(1000); DECLARE ctemp VARCHAR(1000); SET ptemp = '#'; SET ctemp = rootId; WHILE ctemp IS NOT NULL DO SET ptemp = concat(ptemp, ',', ctemp); SELECT group_concat(id) INTO ctemp FROM t_tree_table WHERE FIND_IN_SET(pid, ctemp) > 0; END WHILE; RETURN ptemp; END;
下面是查询语句,只要在getChild的参数中输入需要查询的父级id即可,
例如示例数据中的 河南 的 id 为 2.
select * from t_tree_table where find_in_set(id,getChild(2));