mysql函數遞歸
阿新 • • 發佈:2018-12-27
分享 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 fromsys_organ where FIND_IN_SET(OR_ID,findOrgan(1))
這是數據庫查詢組織id為1的下屬id,示例如下
那麽用這些id也就可以查到我們想要的數據了
mysql函數遞歸