4

DBA の初心者です。お付き合いいただきありがとうございます。

概要: グループ、サブグループ、およびユーザーがあります。

  1. ユーザーはグループの所有者になることができるため、そのすべてのサブグループの所有者になる必要があります
  2. ユーザーはグループのコラボレーターまたはフォロワーになることができるため、そのすべてのサブグループのコラボレーターまたはフォロワーである必要があります
  3. ユーザーはサブグループのコラボレーターまたはフォロワーになることができます

表は次のとおりです (簡略化)。

グループ(topic_id,title)

サブグループ(subtopic_id,title,topic_id)

rel_Group (user_id,topic_id,type) //ユーザーとグループ (所有者、コラボレーター、またはフォロワー) の関係を決定する

rel_Subgroup (user_id,subtopic_id,type) //サブグループ (所有者、コラボレーター、またはフォロワー) に対するユーザーの関係を決定する

ユーザー(user_id)

rel_Subgroup の行を INSERT / UPDATE / DELETE するサブグループが作成されたときにトリガーを作成して、グループの所有者、コラボレーター、またはフォロワーであるユーザーがそれぞれサブグループの所有者、コラボレーター、またはフォロワーになるようにしたい

これは私が得た最も近いものですが、まだ得ています: #1415 - トリガーから結果セットを返すことは許可されていません。

SQL クエリ

delimiter //
create trigger Transfer_Rights_to_Subgroup
after insert 
on Subgroup
for each row
begin
select user_id,type from rel_Group where rel_Group.topic_id = NEW.topic_id;
insert into rel_Subgroup VALUES (rel_Group.user_id,NEW.subtopic_id,rel_Group.type); 
END; //
delimiter ;

挿入をソートしてから、更新/削除を把握したいと考えています。

どんな助けでも、大歓迎です!

どうも

4

2 に答える 2

11

それを解決することができました:

DROP TRIGGER IF EXISTS Transfer_Rights_to_Subgroup;
DELIMITER //
CREATE TRIGGER Transfer_Rights_to_Subgroup AFTER INSERT ON subgroup
FOR EACH ROW
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE c1 INT;
    DECLARE c2 INT;
    DECLARE cur CURSOR FOR SELECT User_ID,Type FROM rel_group WHERE rel_group.Topic_ID =     NEW.Topic_ID;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN cur;
        ins_loop: LOOP
            FETCH cur INTO c1,c2;
            IF done THEN
                LEAVE ins_loop;
            END IF;
            INSERT INTO rel_Subgroup VALUES (c1,NEW.Subtopic_ID,c2);
        END LOOP;
    CLOSE cur;
END; //
DELIMITER ;
于 2013-02-19T20:06:16.027 に答える
0

これを試してください:

delimiter //
create trigger Transfer_Rights_to_Subgroup
after insert 
on Subgroup
for each row
begin
select user_id,type  into @userid, @type from group where rel_Group.topic_id = NEW.topic_id;
insert into rel_Subgroup VALUES (@userid,NEW.subtopic_id,@type); 
END; //
delimiter ;
于 2013-02-19T07:49:03.430 に答える