無限級的過程
上下級會員關係通過id和pid確定。
例如:a>b>c>d>e>f>g...
就是a的下級是b,b的下級是c,c的下級是d....(有點類似傳*銷模式?無視掉)
需求,通過使用者g查出所有的上級,則要查到f.e.d.c.b.a這些使用者id
方可給這些上級發送通知。
我們最重要的是取出上級id然後就好辦多了。
首先說明幾個值,user_id 為使用者表中的使用者id,parent_id為表中使用者的上級id。
樣本一條基本的查詢父級idSQL。
SELECT parent_id FROM cx_user WHERE user_id = 10;##查詢user_id為10的上級id
不說廢話了,直接進入中心。
開啟MySQL開始寫預存程序。
DROP PROCEDURE IF EXISTS `getpid`;CREATE DEFINER = `root`@`localhost` PROCEDURE `getpid`(IN `id` int)BEGINSET @pid:=id;#id為查詢的參數 即目前使用者idSET @pidarr:=''; #查詢到的上級數組字串recursion:WHILE @pid!=0 DO SELECT parent_id INTO @pid from cx_users WHERE user_id = @pid;#這裡是你查詢的SQL語句 @pid是動態id IF @pid=0 THEN #到0即結束 LEAVE recursion; END IF; IF LOCATE(@pid,@pidarr)>0 THEN #防止出現上下級關係混亂 LEAVE recursion; END IF; set @pidarr = concat(@pidarr,@pid); set @pidarr = concat(@pidarr,',');END WHILE recursion;SELECT @pidarr AS pidarr;END;
預存程序執行結果,拿圖嚇唬嚇唬你。
PHP端demo
$sql = "CALL getpid(104);";$pidstr = mysql_query($sql);//換成你項目中執行MySQL的函數即可 然後取出 pidarr的值到$pidstr$pidstr = rtrim($pidstr,',');//剔除最右側多餘英文逗號$pidarr = explode(',',$pidstr);//到數組//以下隨意 #ncSJI$@CO3N#@329090*(@@()$u)@j(@(h(@jn9NCD9823N892