【MySQL疑难杂症】如何将树形结构存储在数据库中(方案一、Adjacency List)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【MySQL疑难杂症】如何将树形结构存储在数据库中(方案一、Adjacency List),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1907字,纯文字阅读大概需要3分钟。
内容图文
) RETURNS varchar(1000) CHARSET gb2312 BEGIN DECLARE superiors VARCHAR(1000) DEFAULT ‘‘; DECLARE sTemp INTEGER DEFAULT uid; DECLARE tmpName VARCHAR(20); WHILE (sTemp>0) DO SELECT parent_id into sTemp FROM employees where eid = sTemp; SELECT ename into tmpName FROM employees where eid = sTemp; IF(sTemp>0)THEN SET superiors = concat(tmpName,‘,‘,superiors); END IF; END WHILE; SET superiors = LEFT(superiors,CHARACTER_LENGTH(superiors)-1); RETURN superiors; END这一段存储过程可以查询子节点的所有父节点,来试验一下
好的,骚操作完成。
显然,这样。获取子节点的全部父节点的时候很麻烦。。
4.查询老王管理的所有员工。
思路如下:先获取所有父节点为老王id的员工id,然后将员工姓名加入结果列表里,在调用一个神奇的查找函数,即可进行神奇的查找:
CREATE DEFINER=`root`@`localhost` FUNCTION `getSubordinate`(`uid` int) RETURNS varchar(2000) CHARSET gb2312
BEGIN
DECLARE str varchar(1000);
DECLARE cid varchar(100);
DECLARE result VARCHAR(1000);
DECLARE tmpName VARCHAR(100);
SET str = ‘$‘;
SET cid = CAST(uid as char(10));
WHILE cid is not null DO
SET str = concat(str, ‘,‘, cid);
SELECT group_concat(eid) INTO cid FROM employees where FIND_IN_SET(parent_id,cid);
END WHILE;
SELECT GROUP_CONCAT(ename) INTO result FROM employees WHERE FIND_IN_SET(parent_id,str);
RETURN result;
END
看神奇的结果:
虽然搞出来了,但说实话,真是不容易。。。
这种方法的优点是存储的信息少,查直接上司和直接下属的时候很方便,缺点是多级查询的时候很费劲。所以当只需要用到直接上下级关系的时候,用这种方法还是不错的,可以节省很多空间。后续还会介绍其它存储方案,并没有绝对的优劣之分,适用场合不同而已。
本篇至此告一段落,欢迎大家继续关注。
【MySQL疑难杂症】如何将树形结构存储在数据库中(方案一、Adjacency List)
标签:bsp not enc super 上下 eid 比较 res 管理
本文系统来源:http://www.cnblogs.com/mfrank/p/7992709.html
内容总结
以上是互联网集市为您收集整理的【MySQL疑难杂症】如何将树形结构存储在数据库中(方案一、Adjacency List)全部内容,希望文章能够帮你解决【MySQL疑难杂症】如何将树形结构存储在数据库中(方案一、Adjacency List)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。