SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.06.2022 14:35:11

DDim1000
Участник
Зарегистрирован: 04.06.2022
Сообщений: 5

Триггер. Добавление товара в корзину

Здравствуйте!
Помогите, пожалуйста, доработать триггер, который должен отслеживать добавления товара в корзину.
В таблицы products есть поле count (количество товара), и в корзине (cart) есть такое же поле - count_product.
Нужно чтоб триггер проверял, что бы count_product в таблицы cart не было больше count таблицы products.
Как это можно проверять?

DROP TRIGGER IF EXISTS trigger_AddProdToCart
CREATE TRIGGER trigger_AddProdToCart BEFORE INSERT ON cart
FOR EACH ROW
BEGIN
     
END;

Неактивен

 

#2 04.06.2022 15:56:44

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Триггер. Добавление товара в корзину

DROP TRIGGER IF EXISTS trigger_AddProdToCart;

delimiter //

CREATE TRIGGER trigger_AddProdToCart BEFORE INSERT ON cart
FOR EACH ROW
BEGIN

declare product_count int;

select `count` into product_count from products where id = new.`поле, содержащее id товара в корзине`;

if product_count >= new.count_product then -- count_product в таблице cart не больше count таблицы products

end if;
     
END//

Неактивен

 

#3 04.06.2022 16:45:45

DDim1000
Участник
Зарегистрирован: 04.06.2022
Сообщений: 5

Re: Триггер. Добавление товара в корзину

Подскажите, пожалуйста, что делает new? Получает значения определенного поля последней добавленной или измененной записи в таблице?

Неактивен

 

#4 04.06.2022 18:09:28

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Триггер. Добавление товара в корзину

NEW.col_name обращается к столбцу новой строки, которая будет вставлена, или же к существующей строке после того, как она модифицируется.

Неактивен

 

#5 04.06.2022 20:02:54

DDim1000
Участник
Зарегистрирован: 04.06.2022
Сообщений: 5

Re: Триггер. Добавление товара в корзину

Почему то ошибка:
SQL Error [1415] [0A000]: Not allowed to return a result set from a trigger

DROP PROCEDURE IF EXISTS ROLL_BACK;
DELIMITER //
CREATE PROCEDURE ROLL_BACK()
BEGIN
     SELECT * FROM v_count_prod_in_catalog;
END //
DELIMITER ;

DROP TRIGGER IF EXISTS trigger_AddProdToCart;
DELIMITER //
CREATE TRIGGER trigger_AddProdToCart BEFORE INSERT ON cart
FOR EACH ROW
BEGIN
      DECLARE product_count INT;
      select count_product into product_count from products where id = new.product_id;
     
    IF product_count < NEW.product_id THEN
        CALL ROLL_BACK;
    END IF;
   
END //
DELIMITER ;

Неактивен

 

#6 04.06.2022 20:21:41

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2421

Re: Триггер. Добавление товара в корзину

Непонятно логика - зачем вызывается ROLL_BACK, при том, что там просто селект внутри?
Опишите, чего Вы хотите?

Формальный ответ - в триггерах, если делаете select, то делайте через select into
https://dev.mysql.com/doc/refman/8.0/en … -into.html


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 04.06.2022 20:39:54

DDim1000
Участник
Зарегистрирован: 04.06.2022
Сообщений: 5

Re: Триггер. Добавление товара в корзину

deadka написал:

Непонятно логика - зачем вызывается ROLL_BACK, при том, что там просто селект внутри?
Опишите, чего Вы хотите?
...

Вообще задача такая: Если пользователь добавил в корзину большее количество товара, чем есть на самом дели, то делать отмену действий. Вместо селекта я хотел сделать ROLLBACK;

Неактивен

 

#8 04.06.2022 21:04:00

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Триггер. Добавление товара в корзину

Неактивен

 

#9 04.06.2022 21:10:51

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2421

Re: Триггер. Добавление товара в корзину

Добавлю, что это плохая практика - триггерами такие ошибки ловить. Лучше на стороне приложения делать.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#10 05.06.2022 12:01:01

DDim1000
Участник
Зарегистрирован: 04.06.2022
Сообщений: 5

Re: Триггер. Добавление товара в корзину

deadka написал:

Добавлю, что это плохая практика - триггерами такие ошибки ловить. Лучше на стороне приложения делать.

Да, мне нужно для ДЗ пару триггеров придумать, но ничего не получается придумать.

Неактивен

 

#11 05.06.2022 22:10:35

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2421

Re: Триггер. Добавление товара в корзину

Так бы сразу и сказали :-).

Сделайте триггер, который в случае покупки нового товара вставит запись в таблицу с логами - что такой-то человек тогда-то купил то-то.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson