У меня есть 3 таблицы:Mysql Trigger: Результат состоит из более чем одной строки
Модуль:
id_module | name
--------------------
1 users
2 roles
...
профиля:
id_profile | name
--------------------
1 admin
2 promoter
И Разрешение
id | id_profile | id_module | read | write | modify | delete
---------------------------------------------------------------
Что Я хочу, чтобы триггер заполнил таблицу permiss каждый раз, когда я вставляю новый модуль ... но для каждого существующего профиля.
Таким образом:
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;
Это хорошо работает, когда есть профиль ... когда более чем один, когда я вернусь «Результат состоял из более чем одной строки»
Я читал, что эта проблема возникает, когда вы объявляете переменную, которая поддерживает одно значение ... Вы можете вставлять записи для каждого идентификатора профиля таблицы?
Привет, это очень интересно и просто ваше решение. Но перед вставкой можно сделать оператор if? Я просто хочу знать, будет ли id_profile «1» вставлен в разрешения 1,1,1,1 ... и если id_profile - это другое число, вставьте 0,0,0,0. Возможно ли это в одном предложении или его можно решить с помощью курсора? – csotelo