[解決済み] PHP プロジェクトの要件: ユーザーが製品を購入したときに、上司に通知を送信する (下位レベルのメンバーは無制限)

WBOY
リリース: 2016-06-20 12:40:20
オリジナル
1083 人が閲覧しました

無限レベルのプロセス

上位レベルのメンバーと下位レベルのメンバーの関係は、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
ログイン後にコピー


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート