首頁 > 軟體

mysql查詢上下級機構的方法範例

2022-04-20 19:01:41

前言

查詢上下級機構,這個功能可能會在日常工作中遇到,如果使用的oracle資料庫,那就很簡單,只需要使用oracle提供的層級查詢即可實現。如果使用的mysql資料庫,那麼就需要自己實現這個功能。下面就介紹mysql實現上下級機構查詢。

思路:

  • 自定義mysql方法
  • 利用mysql中的【FIND_IN_SET】【group_concat】兩個方法

(1)準備測試資料表

CREATE TABLE `org_test` (
  `org_no` varchar(32) NOT NULL COMMENT '機構編號',
  `org_name` varchar(200) NOT NULL COMMENT '機構名稱',
  `p_org_no` varchar(32) DEFAULT NULL COMMENT '上級機構編號',
  PRIMARY KEY (`org_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

測試資料

INSERT INTO `org_test` VALUES ('1001', '福建省', null);
INSERT INTO `org_test` VALUES ('100101', '廈門市', '1001');
INSERT INTO `org_test` VALUES ('10010101', '思明區', '100101');
INSERT INTO `org_test` VALUES ('10010102', '湖裡區', '100101');
INSERT INTO `org_test` VALUES ('10010103', '同安區', '100101');
INSERT INTO `org_test` VALUES ('100102', '福州市', '1001');

(2)查詢指定機構的所有下級機構(包括自身)

delimiter $$
CREATE FUNCTION getOrgChild (orgNo varchar(32)) RETURNS varchar(1000) CHARSET utf8
BEGIN
	-- 定義臨時變數
	DECLARE tmpOrg varchar(1000) DEFAULT '';
	-- 迴圈查詢,orgNo不為空,則迴圈
	WHILE orgNo IS NOT NULL DO
		-- 拼接所有查詢結果
		IF tmpOrg = '' THEN
			SET tmpOrg = CONCAT(tmpOrg, orgNo);
		ELSE
			SET tmpOrg = CONCAT(tmpOrg, ',', orgNo);
		END IF;
		-- 查詢資料
		SELECT group_concat(org_no) INTO orgNo FROM org_test WHERE FIND_IN_SET(p_org_no, orgNo) > 0;
	END WHILE;
	
	-- 返回結果
	RETURN tmpOrg;
END $$

測試結果:

(3)查詢指定機構的所有上級機構(包括自身)

delimiter $$
CREATE FUNCTION getOrgParent (orgNo varchar(32)) RETURNS varchar(1000) CHARSET utf8
BEGIN
	-- 定義臨時變數
	DECLARE tmpOrg varchar(1000) DEFAULT '';
	-- 迴圈查詢,orgNo不為空,則迴圈
	WHILE orgNo IS NOT NULL DO
		-- 拼接所有查詢結果
		IF tmpOrg = '' THEN
			SET tmpOrg = CONCAT(tmpOrg, orgNo);
		ELSE
			SET tmpOrg = CONCAT(tmpOrg, ',', orgNo);
		END IF;
		-- 查詢資料
		SELECT group_concat(p_org_no) INTO orgNo FROM org_test WHERE FIND_IN_SET(org_no, orgNo) > 0;
	END WHILE;
	
	-- 返回結果
	RETURN tmpOrg;
END $$

測試結果:

總結

到此這篇關於mysql查詢上下級機構的文章就介紹到這了,更多相關mysql查詢上下級機構內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com