1. 程式人生 > >mysql函數遞歸

mysql函數遞歸

分享 image .com not null 刪除 類型 sele area serve

我記得oracle,sql server等可以直接在sql語句上遞歸,但mysql卻沒有

換一種思路,用函數遞歸

DROP FUNCTION IF EXISTS findOrgan;//DROP是刪除這個表
CREATE FUNCTION findOrgan//5(areaId VARCHAR(255)//1)
RETURNS VARCHAR(4000)
BEGIN
DECLARE sTemp VARCHAR(4000);
DECLARE sTempChd VARCHAR(4000);

SET sTemp=$;
SET sTempChd = CAST(areaId AS CHAR);

WHILE sTempChd IS NOT NULL DO
SET sTemp
= CONCAT(sTemp,,,sTempChd); SELECT GROUP_CONCAT(OR_ID)//2 INTO sTempChd FROM sys_organ//3 WHERE FIND_IN_SET(PARENT_ID//4,sTempChd)>0; END WHILE; RETURN sTemp; END;

這是查詢某組織節點及它下屬所有節點,

1.這是輸入參數的類型

2.這是組織表組織id

3這是組織表

4這是組織表父級id

5這是你要定義的函數名

技術分享圖片

我用的是navicat,點擊運行之後就可以看到

技術分享圖片

接下來我們測試一下

技術分享圖片

查詢了所有的組織id為1的下屬id(包括自身)

SELECT OR_ID from
sys_organ where FIND_IN_SET(OR_ID,findOrgan(1))

這是數據庫查詢組織id為1的下屬id,示例如下

技術分享圖片

那麽用這些id也就可以查到我們想要的數據了

mysql函數遞歸