Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 03.12.2017
Сообщений: 37

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

03.05.2019, 16:25. Показов 2031. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При заполнении таблицы zamovlennya говорит что поля NEW.zamovlennya.tarif_has_company_tarif_ id_tarif не существует.

Да его не существует. Существует поле tarif_has_company_tarif_id_tarif в таблице zamovlennya мне нужно взять данные которые я туда записываю и сравнить. как мне это сделать?

MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DELIMITER //
create trigger tg1 after insert
on zamovlennya for each row
begin 
    declare p float;
    set p = (select cina_1km from tarif_has_company, zamovlennya 
where 
    (tarif_has_company.tarif_id_tarif = NEW.zamovlennya.tarif_has_company_tarif_id_tarif) 
and 
    (tarif_has_company.company_id_company = NEW.zamovlennya.tarif_has_company_company_id_company));
 
    set p=p*new.z_vidstan;
    insert into  zamovlennya
    set new.z_suma=p;
end//
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.05.2019, 16:25
Ответы с готовыми решениями:

Как правильно написать Триггер?
есть две таблицы articles с полями(`id`, `text`, `title`, `add_date`) и comments(`id_comments`, `id_articles`, `user_name`, `comment`,...

Как правильно надо создавать триггер
Нужно создать триггер , у меня есть 2 таблички, create table vra4i(vnum number primary key,special varchar2(30),vfio varchar2(30)); ...

Не работает триггер
Всем привет! Написал триггер, но он не срабатывает, в чем может быть причина? Код: create trigger u_dep_col_sotr after update on...

13
231 / 163 / 54
Регистрация: 26.10.2014
Сообщений: 928
03.05.2019, 17:43
Если это поле зачем пишете
SELECT cina_1km FROM tarif_has_company, zamovlennya
0
0 / 0 / 0
Регистрация: 03.12.2017
Сообщений: 37
03.05.2019, 17:58  [ТС]
Поле tarif_has_company_tarif_id_tarif в таблице zamovlennya. С него взять информацию которую ввожу и сравнить с полем "tarif_id_tarif" из таблицы "tarif_has_company".
Знаю чтобы принять информацию, которая вводится используется оператор "NEW" но когда его здесь использую выбивает ошибку.
0
46 / 33 / 14
Регистрация: 12.09.2013
Сообщений: 167
03.05.2019, 18:20
Слово "new" как бы заменяет название таблицы. Попробуйте New.[название поля]
0
0 / 0 / 0
Регистрация: 03.12.2017
Сообщений: 37
03.05.2019, 18:36  [ТС]
naHuka, так лучше спасибо, но теперь пишет что запрос возвращает более 1 строку. хотя я проверял что под такими ид только одна запись. В чем может быть проблема?
0
46 / 33 / 14
Регистрация: 12.09.2013
Сообщений: 167
03.05.2019, 18:40
SQL
1
SELECT cina_1km FROM tarif_has_company, zamovlennya
Выполните этот запрос и скиньте сюда скрин результата
0
0 / 0 / 0
Регистрация: 03.12.2017
Сообщений: 37
03.05.2019, 18:51  [ТС]
naHuka,
да выводило мусор. исправил триггер на
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DELIMITER //
CREATE TRIGGER tg1 after INSERT
ON zamovlennya FOR each ROW
BEGIN 
    DECLARE p FLOAT;
    SET p = (SELECT cina_1km FROM tarif_has_company
WHERE 
    (tarif_has_company.tarif_id_tarif = NEW.tarif_has_company_tarif_id_tarif) 
AND 
    (tarif_has_company.company_id_company = NEW.tarif_has_company_company_id_company));
 
    SET p=p*NEW.z_vidstan;
    INSERT INTO  zamovlennya
    SET NEW.z_suma=p;
END//
но теперь новая ошибка, когда заполняю таблицу zamovlennya
Миниатюры
Триггер не правильно работает  
0
46 / 33 / 14
Регистрация: 12.09.2013
Сообщений: 167
03.05.2019, 18:59
SQL
1
2
INSERT INTO  zamovlennya
    SET NEW.z_suma=p;
Попробуйте переписать этот запрос без оператора INSERT. Вам ведь нужно не вставлять новую запись, а обновлять значение поля z_summa. Для этого используется оператор update :

Update zamovlennya
set z_suma = p;

Что касается Вашей ошибки - вы два раза указываете поле z_suma, во время выполнения операции INSERT
0
0 / 0 / 0
Регистрация: 03.12.2017
Сообщений: 37
03.05.2019, 19:11  [ТС]
naHuka, когда написал так
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DELIMITER //
CREATE TRIGGER tg1 after UPDATE
ON zamovlennya FOR each ROW
BEGIN 
    DECLARE p FLOAT;
    SET p = (SELECT cina_1km FROM tarif_has_company
WHERE 
    (tarif_has_company.tarif_id_tarif = NEW.tarif_has_company_tarif_id_tarif) 
AND 
    (tarif_has_company.company_id_company = NEW.tarif_has_company_company_id_company));
 
    SET p=p*NEW.z_vidstan;
    UPDATE zamovlennya
    SET z_suma = p;
END//
то ошибок нет, но в поле z_suma ничего не записало
0
46 / 33 / 14
Регистрация: 12.09.2013
Сообщений: 167
03.05.2019, 19:14
SQL
1
2
3
4
5
SELECT cina_1km FROM tarif_has_company
WHERE 
    (tarif_has_company.tarif_id_tarif = NEW.tarif_has_company_tarif_id_tarif) 
AND 
    (tarif_has_company.company_id_company = NEW.tarif_has_company_company_id_company))
Что возвращает этот запрос?

Какое значение у поля NEW.z_vidstan?
1
0 / 0 / 0
Регистрация: 03.12.2017
Сообщений: 37
03.05.2019, 19:23  [ТС]
naHuka,
запрос ничего не возвращает потому что когда выполняю его без триггера ниче не записываю в поля NEW.tarif_has_company_tarif_id_tarif
и
NEW.tarif_has_company_company_id_company .
а в NEW.z_vidstan я записываю любое число например 5
0
46 / 33 / 14
Регистрация: 12.09.2013
Сообщений: 167
03.05.2019, 19:44
Ты можешь выполнить запрос и без тригера. Для это подставь вместо "NEW.tarif_has_company_tarif_id_tari f" и "NEW.tarif_has_company_company_id_compan y" сами значения.

И напишите, пожалуйста, первоначальную формулировку задачи.
1
0 / 0 / 0
Регистрация: 03.12.2017
Сообщений: 37
05.05.2019, 21:19  [ТС]
naHuka, когда поставил значение выводит то что и нужно.

нужно посчитать цену за проезд в такси и записать в таблицу zamovlennya в поле z_suma. она равна cina_1km * z_vidstan но цена за километер зависит от тарифа и компании такси предоставляющее услугу. Для этого я сравниваю (tarif_has_company.tarif_id_tarif=NEW.ta rif_has_company_tarif_id_tarif)
AND
(tarif_has_company.company_id_company = NEW.tarif_has_company_company_id_company ))

если запрос выводит правильную цену. то может ошибка в умножении или при записи в записи в таблицу?
Миниатюры
Триггер не правильно работает  
0
0 / 0 / 0
Регистрация: 03.12.2017
Сообщений: 37
06.05.2019, 19:19  [ТС]
Разобрался, может кому нибудь будет нужно. Триггер на автоматическое заполнение поля данными

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
DELIMITER //
CREATE TRIGGER tg1 BEFORE INSERT
ON zamovlennya FOR each ROW
BEGIN 
    DECLARE p FLOAT;
    SET p = (SELECT cina_1km FROM tarif_has_company
WHERE 
    (tarif_has_company.tarif_id_tarif = NEW.tarif_has_company_tarif_id_tarif) 
AND 
    (tarif_has_company.company_id_company = NEW.tarif_has_company_company_id_company));
    SET p=p*NEW.z_vidstan;
       SET NEW.z_suma=p;
END//
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.05.2019, 19:19
Помогаю со студенческими работами здесь

Не работает триггер
По заданию нужно создать триггер, который при выполнении функции INSERT для таблицы 1 вставлял бы в таблицу 2 количество строк в таблице 1....

Не работает триггер в MySQL
Ребята, подскажите, что делаю не так? Есть процедура CREATE DEFINER=`admin`@`%` PROCEDURE StatForCall () BEGIN SET...

Почему синхронный JK триггер работает не правильно?
На микросхеме 7472 я собрал синхронный JK триггер. Он должен переключаться сразу после импульса, то есть по заднему фронту. Он же...

Правильно ли написан триггер?
Create trigger T1 ON Список_Процедур Instead of insert as Insert into Список_Процедур select Список_Процедур.N_Записи,...

Правильно ли добавлен триггер?
Доброго времени суток. У меня появилась необходимость добавления триггера. Имеется: менюбар с кнопками, одна из которых должна...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru