亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

Mysql通過Adjacency List(鄰接表)存儲樹形結構

2024-07-24 13:15:11
字體:
來源:轉載
供稿:網友

以下內容給大家介紹了MYSQL通過Adjacency List (鄰接表)來存儲樹形結構的過程介紹和解決辦法,并把存儲后的圖例做了分析。

今天來看看一個比較頭疼的問題,如何在數據庫中存儲樹形結構呢?

像mysql這樣的關系型數據庫,比較適合存儲一些類似表格的扁平化數據,但是遇到像樹形結構這樣有深度的人,就很難駕馭了。

舉個栗子:現在有一個要存儲一下公司的人員結構,大致層次結構如下:

Mysql,Adjacency,List,鄰接表,樹形結構

 

(畫個圖真不容易。。)

那么怎么存儲這個結構?并且要獲取以下信息:

1.查詢小天的直接上司。

2.查詢老宋管理下的直屬員工。

3.查詢小天的所有上司。

4.查詢老王管理的所有員工。

方案一、(Adjacency List)只存儲當前節點的父節點信息。

  CREATE TABLE Employees(
  eid int,
  ename VARCHAR(100),
        position VARCHAR(100),
  parent_id int
  )

記錄信息簡單粗暴,那么現在存儲一下這個結構信息:

Mysql,Adjacency,List,鄰接表,樹形結構

好的,現在開始進入回答環節:

1.查詢小天的直接上司:

SELECT e2.eid,e2.ename FROM employees e1,employees e2 WHERE e1.parent_id=e2.eid AND e1.ename='小天';

Mysql,Adjacency,List,鄰接表,樹形結構

2.查詢老宋管理下的直屬員工:

SELECT e1.eid,e1.ename FROM employees e1,employees e2 WHERE e1.parent_id=e2.eid AND e2.ename='老宋';

Mysql,Adjacency,List,鄰接表,樹形結構

3.查詢小天的所有上司。

這里肯定沒法直接查,只能用循環進行循環查詢,先查直接上司,再查直接上司的直接上司,依次循環,這樣麻煩的事情,還是得先建立一個存儲過程:

睜大眼睛看仔細了,接下來是騷操作環節:

CREATE DEFINER=`root`@`localhost` FUNCTION `getSuperiors`(`uid` int) RETURNS varchar(1000) CHARSET gb2312BEGIN  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

這一段存儲過程可以查詢子節點的所有父節點,來試驗一下 

 Mysql,Adjacency,List,鄰接表,樹形結構

好的,騷操作完成。

顯然,這樣。獲取子節點的全部父節點的時候很麻煩。。

4.查詢老王管理的所有員工。

思路如下:先獲取所有父節點為老王id的員工id,然后將員工姓名加入結果列表里,在調用一個神奇的查找函數,即可進行神奇的查找:

CREATE DEFINER=`root`@`localhost` FUNCTION `getSubordinate`(`uid` int) RETURNS varchar(2000) CHARSET gb2312BEGIN   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,鄰接表,樹形結構

雖然搞出來了,但說實話,真是不容易。。。

這種方法的優點是存儲的信息少,查直接上司和直接下屬的時候很方便,缺點是多級查詢的時候很費勁。所以當只需要用到直接上下級關系的時候,用這種方法還是不錯的,可以節省很多空間。后續還會介紹其它存儲方案,并沒有絕對的優劣之分,適用場合不同而已。

 

注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性猛交xxxx黑人| 97av在线播放| 色小说视频一区| 日韩av在线不卡| 日韩国产欧美精品在线| 色狠狠久久aa北条麻妃| 亚洲激情 国产| 欧美大胆a视频| 久久免费成人精品视频| 国产精品第一页在线| 91精品国产91久久久久久吃药| 国产成人小视频在线观看| 久久男人的天堂| 欧美大片在线影院| 亚洲激情第一页| 欧美午夜影院在线视频| 亚洲国产精品久久久久久| 欧美黑人xxxx| 美女少妇精品视频| 久久成人精品视频| 97婷婷大伊香蕉精品视频| 成人免费黄色网| 国产不卡一区二区在线播放| 久久久久九九九九| 日韩在线视频免费观看| 久久久久久一区二区三区| 中文综合在线观看| 最近2019中文字幕第三页视频| 国内精品久久久久伊人av| 5278欧美一区二区三区| 伊人久久久久久久久久| 欧美激情乱人伦一区| 国产精品久久久久久久午夜| 久久精品视频亚洲| 5252色成人免费视频| 在线视频中文亚洲| 国产一区二区黑人欧美xxxx| 亚洲肉体裸体xxxx137| 国产精品美腿一区在线看| 这里只有精品视频在线| 国产精品com| 亚洲人成欧美中文字幕| 亚洲在线视频观看| 欧美日韩在线一区| 亚洲国产日韩欧美综合久久| 中国人与牲禽动交精品| 一区二区欧美日韩视频| 亚洲欧美精品一区| 亚洲成人激情图| 性色av一区二区三区| 欧美一级视频在线观看| 欧美成人免费播放| 亚洲国产小视频在线观看| 正在播放国产一区| 国产欧美va欧美va香蕉在线| 亚洲精品美女在线观看| 国产精品高潮呻吟久久av无限| 成人在线精品视频| 国产成+人+综合+亚洲欧美丁香花| 国产日韩精品综合网站| yellow中文字幕久久| 91精品国产自产在线老师啪| 日韩高清不卡av| 欧美成人合集magnet| 国产欧美一区二区三区视频| 亚洲精品美女在线| 欧美日韩中国免费专区在线看| 欧美肥婆姓交大片| 色www亚洲国产张柏芝| 伊人伊成久久人综合网小说| 成人黄色午夜影院| 日韩大胆人体377p| 91精品国产91久久久久久不卡| 国产午夜精品麻豆| 日韩中文字幕在线播放| 中文字幕在线亚洲| 欧美大片在线免费观看| 亚洲人成电影网站| 亚洲欧美一区二区三区久久| 456亚洲影院| 精品国产一区二区三区四区在线观看| 91精品国产综合久久久久久久久| 亚洲精品视频免费| 久久久国产精彩视频美女艺术照福利| 欧美亚洲午夜视频在线观看| 国产精品久久久久高潮| 国产精品视频中文字幕91| 久久久精品欧美| 欧美日韩国产中文精品字幕自在自线| 日韩欧美黄色动漫| 欧美激情啊啊啊| 成人黄色午夜影院| 96精品久久久久中文字幕| 亚洲精品影视在线观看| 久久久久国产一区二区三区| 在线精品视频视频中文字幕| 日韩欧美中文字幕在线观看| 欧美精品www在线观看| 日韩人体视频一二区| 自拍偷拍免费精品| 日韩视频一区在线| 国产福利视频一区二区| 国产ts一区二区| 1769国内精品视频在线播放| 欧美黑人极品猛少妇色xxxxx| 国产亚洲成精品久久| 成人免费看吃奶视频网站| 热久久美女精品天天吊色| 国产原创欧美精品| 97国产精品视频人人做人人爱| 国产福利视频一区| 久久影视电视剧免费网站清宫辞电视| 国产精品福利在线观看| 国产一区红桃视频| 91精品国产综合久久男男| 91网在线免费观看| 懂色av影视一区二区三区| 91日本在线观看| 欧美精品福利视频| 91亚洲午夜在线| 精品视频9999| 一区二区三区精品99久久| 超碰精品一区二区三区乱码| 九九精品在线观看| 欧美一区三区三区高中清蜜桃| 按摩亚洲人久久| 中文字幕亚洲一区在线观看| 国产精品88a∨| 欧美日韩人人澡狠狠躁视频| 久久久久久国产| 亚洲精品小视频| 日韩av在线资源| 啪一啪鲁一鲁2019在线视频| 欧美老女人性视频| 亚洲精品99久久久久中文字幕| 久久在线免费视频| 欧美日韩一二三四五区| 91欧美激情另类亚洲| 国产精品免费久久久久影院| 亚洲男女性事视频| 亚洲最新av网址| 亚洲精美色品网站| 国产精品美女久久久久av超清| 久久高清视频免费| 久久久国产成人精品| 91av在线国产| 国产精品一区二区三区免费视频| 国模精品一区二区三区色天香| 欧美国产精品人人做人人爱| 91免费在线视频| 国产精品一二三视频| 亚洲精品国产精品自产a区红杏吧| 欧美一性一乱一交一视频| 国产精品亚洲第一区| 午夜精品久久久久久久久久久久久| 中文字幕在线国产精品| 国产成人高清激情视频在线观看| 亚洲午夜未满十八勿入免费观看全集| 国产成人精品a视频一区www| 亚洲大胆人体在线| 欧美日韩日本国产| 久久久久久欧美| 欧美小视频在线观看| 欧美日韩高清区|