無限レベルのプロセス
上位レベルのメンバーと下位レベルのメンバーの関係は、id と pid によって決まります。
例: a>b>c>d>e>f>g...
つまり、a の従属は b、b の従属は c、そしてc の部下は d... ..(MLM モデルに似ていますか? 無視してください)
必要に応じて、ユーザー g を通じてすべての上司を見つけるには、f.e.d.c.b.a のユーザー ID を見つける必要があります
これらの上司にメッセージを送信する前に通知してください。
私たちにとって最も重要なことは、優れた ID を取り出すことです。そうすれば、それはずっと簡単になります。
最初にいくつかの値について説明します。user_id は user テーブル内のユーザー ID、parent_id はテーブル内のユーザーの上位 ID です。
基本的なクエリの親 idSQL の例。
SELECTparent_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 デモ
$sql = "CALL getpid(104);";$pidstr = mysql_query($sql);//换成你项目中执行MySQL的函数即可 然后取出 pidarr的值到$pidstr$pidstr = rtrim($pidstr,',');//剔除最右侧多余英文逗号$pidarr = explode(',',$pidstr);//到数组//以下随意 #ncSJI$@CO3N#@329090*(@@()$u)@j(@(h(@jn9NCD9823N892