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

Европа - быстрые серверы на дисках NVMe от $5 / Русский датацентр от 199руб

Тема в разделе "PHP & Mysql & MariaDB & Percona", создана пользователем Mykisman, 11 дек 2018.

  1. Mykisman

    Mykisman Новичок

    Сообщения:
    1
    Ваш город:
    Покров
    Address:
    Pokrov, Russia
    Country:
    Location on Map:
    Ребят, у меня такая проблема: мне нужно в цикле записать значения триггером в таблицу, обычный 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.
    Что делать, помогите пожалуйста.
     
    Последнее редактирование: 11 дек 2018
  2. Тугай

    Тугай Новичок

    Сообщения:
    245
    Ваш город:
    Dnipro, Ukraine
    Address:
    Dnipro, Ukraine
    Country:
    Location on Map:
    Код:
    SELECT NEW.id_cadet FROM Cadets INTO @rabotai; 
    - это чушь какая-то:)
    присваивание делается так
    Код:
    SET @rabotai = NEW.id_cadet;
    Этот select вообще не нужен, убери должно работать.