mysql查詢上下級(jí)機(jī)構(gòu)的方法實(shí)例
前言
查詢上下級(jí)機(jī)構(gòu),這個(gè)功能可能會(huì)在日常工作中遇到,如果使用的oracle數(shù)據(jù)庫(kù),那就很簡(jiǎn)單,只需要使用oracle提供的層級(jí)查詢即可實(shí)現(xiàn)。如果使用的mysql數(shù)據(jù)庫(kù),那么就需要自己實(shí)現(xiàn)這個(gè)功能。下面就介紹mysql實(shí)現(xiàn)上下級(jí)機(jī)構(gòu)查詢。
思路:
- 自定義mysql方法
- 利用mysql中的【FIND_IN_SET】【group_concat】?jī)蓚€(gè)方法
(1)準(zhǔn)備測(cè)試數(shù)據(jù)表
CREATE TABLE `org_test` ( `org_no` varchar(32) NOT NULL COMMENT '機(jī)構(gòu)編號(hào)', `org_name` varchar(200) NOT NULL COMMENT '機(jī)構(gòu)名稱', `p_org_no` varchar(32) DEFAULT NULL COMMENT '上級(jí)機(jī)構(gòu)編號(hào)', PRIMARY KEY (`org_no`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
測(cè)試數(shù)據(jù)
INSERT INTO `org_test` VALUES ('1001', '福建省', null);
INSERT INTO `org_test` VALUES ('100101', '廈門市', '1001');
INSERT INTO `org_test` VALUES ('10010101', '思明區(qū)', '100101');
INSERT INTO `org_test` VALUES ('10010102', '湖里區(qū)', '100101');
INSERT INTO `org_test` VALUES ('10010103', '同安區(qū)', '100101');
INSERT INTO `org_test` VALUES ('100102', '福州市', '1001');(2)查詢指定機(jī)構(gòu)的所有下級(jí)機(jī)構(gòu)(包括自身)
delimiter $$ CREATE FUNCTION getOrgChild (orgNo varchar(32)) RETURNS varchar(1000) CHARSET utf8 BEGIN -- 定義臨時(shí)變量 DECLARE tmpOrg varchar(1000) DEFAULT ''; -- 循環(huán)查詢,orgNo不為空,則循環(huán) WHILE orgNo IS NOT NULL DO -- 拼接所有查詢結(jié)果 IF tmpOrg = '' THEN SET tmpOrg = CONCAT(tmpOrg, orgNo); ELSE SET tmpOrg = CONCAT(tmpOrg, ',', orgNo); END IF; -- 查詢數(shù)據(jù) SELECT group_concat(org_no) INTO orgNo FROM org_test WHERE FIND_IN_SET(p_org_no, orgNo) > 0; END WHILE; -- 返回結(jié)果 RETURN tmpOrg; END $$
測(cè)試結(jié)果:

(3)查詢指定機(jī)構(gòu)的所有上級(jí)機(jī)構(gòu)(包括自身)
delimiter $$ CREATE FUNCTION getOrgParent (orgNo varchar(32)) RETURNS varchar(1000) CHARSET utf8 BEGIN -- 定義臨時(shí)變量 DECLARE tmpOrg varchar(1000) DEFAULT ''; -- 循環(huán)查詢,orgNo不為空,則循環(huán) WHILE orgNo IS NOT NULL DO -- 拼接所有查詢結(jié)果 IF tmpOrg = '' THEN SET tmpOrg = CONCAT(tmpOrg, orgNo); ELSE SET tmpOrg = CONCAT(tmpOrg, ',', orgNo); END IF; -- 查詢數(shù)據(jù) SELECT group_concat(p_org_no) INTO orgNo FROM org_test WHERE FIND_IN_SET(org_no, orgNo) > 0; END WHILE; -- 返回結(jié)果 RETURN tmpOrg; END $$
測(cè)試結(jié)果:

總結(jié)
到此這篇關(guān)于mysql查詢上下級(jí)機(jī)構(gòu)的文章就介紹到這了,更多相關(guān)mysql查詢上下級(jí)機(jī)構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MYSQL?Binlog恢復(fù)誤刪數(shù)據(jù)庫(kù)詳解
MySQL一旦誤刪數(shù)據(jù)庫(kù)之后恢復(fù)數(shù)據(jù)很麻煩,這里記錄一下艱辛的恢復(fù)過程,這篇文章主要給大家介紹了關(guān)于如何利用MySQL的binlog恢復(fù)誤刪數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下2022-11-11
MySQL線程處于Opening tables的問題解決方法
在本篇文章里小編給大家分享了關(guān)于MySQL線程處于Opening tables的問題解決方法,有興趣的朋友們學(xué)習(xí)下。2019-01-01
MySQL 不用存儲(chǔ)過程循環(huán)插入數(shù)據(jù)的方法
在MySQL中,使用INSERT INTO VALUES語(yǔ)句可以一次性插入多行數(shù)據(jù),提高插入效率,還可通過Python的pymysql庫(kù)生成和執(zhí)行插入語(yǔ)句,這不僅減少了操作時(shí)間,還提高了代碼的簡(jiǎn)潔性和執(zhí)行效率2024-09-09
MySQL中聚合函數(shù)count的使用和性能優(yōu)化技巧
這篇文章主要介紹了Windows 10,MySQL版本是5.7.12-log環(huán)境下mysql中聚合函數(shù)count的使用和性能優(yōu)化,需要的朋友可以參考下2018-06-06
mysql中查詢字段為null的數(shù)據(jù)navicat問題
這篇文章主要介紹了mysql中查詢字段為null的數(shù)據(jù)navicat問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12

