0

私は3つのテーブルを持っています:

モジュール:

id_module   | name
--------------------
1             users
2             roles
...

プロフィール:

id_profile   | name
--------------------
1             admin
2             promoter

そして許可

id   | id_profile  | id_module | read | write | modify | delete
---------------------------------------------------------------

私が欲しいのは、新しいモジュールを挿入するたびにテーブルのアクセス許可を埋めるトリガーです...ただし、既存のすべてのプロファイルに対してです。

したがって:

INSERT INTO `module` (`name`) VALUES
    ('user'),
    ('roles');

既存のプロファイルの管理者プロモーターの権限テーブルは、次のように入力されます。

id   | id_profile  | id_module | read | write | modify | delete
---------------------------------------------------------------
1      1             1           0      0       0        0
2      1             2           0      0       0        0
3      2             1           0      0       0        0
4      2             2           0      0       0        0

このために、次のトリガーを作成しました。

CREATE TRIGGER `create_permission` AFTER INSERT ON `module`
    FOR EACH ROW
    BEGIN
    DECLARE `my_profile` INT(11) ;

    SELECT id_profile INTO `my_profile` FROM profile WHERE state <>3;

    INSERT INTO `permission` (`id_profile`, `id_module`, `read`, `write`, `modify`, `delete`) VALUES(`my_profile`, NEW.`id_module `,0,0,0,0);

END;

プロファイルがある場合にうまく機能します...「結果が複数の行で構成されている」を返すときに複数の場合

単一の値をサポートする変数を宣言すると、この問題が発生することを読みました... テーブル プロファイルの ID ごとにレコードを挿入できますか?

4

1 に答える 1

1

お気づきのように、変数にはスカラー値のみを割り当てることができます。

SELECTクエリの多くの結果を反復処理するには、 CURSOR.

私は個人的に面倒なCURSOR構文が嫌いです。あなたの特定のケースでは、もっと簡単なINSERT INTO...SELECTトリックをお勧めします:

INSERT INTO permission (id_profile, id_module, read, write, modify, delete)
SELECT id_profile, NEW.id_module,0,0,0,0 FROM profile WHERE state <> 3;
于 2012-06-09T22:09:26.653 に答える