Неправильно работает триггер

Mykisman

Новичок
Ребят, у меня такая проблема: мне нужно в цикле записать значения триггером в таблицу, обычный INSERT тут не прокатит потому что я заведомо не знаю сколько значений мне нужно вставить. Суть в чем, у меня есть таблица учеников, предметов и таблица оценок, и вот для каждого ученика по определенному предмету считается общая сумма набранных баллов, для каждого нового ученика нужно в таблице баллов создать id_cadet и соответствующий предмет id_sub (для примера возьмем что у меня предметов предварительно 4) По задумке при добавлении нового ученика для него сразу же создается запись в таблице оценок со всеми существующими предметами. Вот код:

CREATE TRIGGER `insert_cad` AFTER INSERT ON `Cadets`
FOR EACH ROW BEGIN
SELECT COUNT(Subjects.id_sub) FROM Subjects INTO @subcunt;
SET @subj=1;
SELECT NEW.id_cadet FROM Cadets INTO @rabotai; /*попытался запихнуть это в переменную, кто-то сказал мне что мол этот NEW одноразовый потому то и делает только одну запись*/
WHILE @subj <= @subcunt DO

INSERT INTO total_mark(total_mark.id_cadet,total_mark.id_sub) VALUES (NEW.id_cadet,@subj);
SET @subj=(@subj+1);
END WHILE;
END


Безымянный.png
Вот как оно должно примерно выглядеть, кстати триггер еще сбивает автоинкремент, до 24-й записи я все делал вручную, а потом триггер как-бы просчитал в уме что-ли, и сделал только одно значение, а должно быть допустим для 8-го ученника такая запись 8(id_cadet) 1(id_sub), 8 2 , 8 3, 8 4, а total mark позже подсчитан другим триггером.
Проблема в том что триггер записывает лишь последнее значение, то есть четвертое с верным айди ученика но лишь с одним предметом вместо 4-х, а при попытке запихнуть NEW.id_cadet в переменную выдавало такую ошибку: #1172 - result consisted of more than one row mysql.
Что делать, помогите пожалуйста.
 
Последнее редактирование:

Тугай

Новичок
Код:
SELECT NEW.id_cadet FROM Cadets INTO @rabotai;
- это чушь какая-то:)
присваивание делается так
Код:
SET @rabotai = NEW.id_cadet;
Этот select вообще не нужен, убери должно работать.
 
Сверху