2017-02-02 5 views
0

У меня есть таблица с именем item_quantity с 2 полями, количеством и запрошенным. У меня есть запрос, который будет обновлять количество полей каждый раз, когда клиент покупает. Проблема в том, что я хочу обновить колонку, запрашиваемую до 0, когда количество станет 0. Это то, что я пробовал до сих пор.Обновить еще один столбец во время запроса на обновление на основе его нового значения

UPDATE `item_quantity`SET `quantity`=quantity-5,`requested`= CASE when `quantity` = 0 then 0 else 1 end where `item_id`=1; 

Но дело подчеркнуто красным. Я не знаю, является ли его синтаксис или логическая ошибка. Как я это сделаю? Заранее спасибо! [This is what i got]1

ответ

1

Вы можете запросить обновление после того, как вы установили item_quantity. Затем вы можете непосредственно сравнить item_quantity так:

UPDATE `item_quantity` 
SET 
    `quantity`= `quantity` - 5 
    ,`requested`= IF(`quantity` = 0, 0, `requested`); 

образец

mysql> SELECT * FROM item_quantity; 
+----+----------+-----------+ 
| id | quantity | requested | 
+----+----------+-----------+ 
| 1 |  10 |   9 | 
+----+----------+-----------+ 
1 row in set (0,00 sec) 

mysql> UPDATE `item_quantity` 
    -> SET 
    -> `quantity`= `quantity` - 5 
    -> ,`requested`= IF(`quantity` = 0, 0, `requested`); 
Query OK, 1 row affected (0,00 sec) 
Rows matched: 1 Changed: 1 Warnings: 0 

mysql> SELECT * FROM item_quantity; 
+----+----------+-----------+ 
| id | quantity | requested | 
+----+----------+-----------+ 
| 1 |  5 |   9 | 
+----+----------+-----------+ 
1 row in set (0,00 sec) 

mysql> UPDATE `item_quantity` 
    -> SET 
    -> `quantity`= `quantity` - 5 
    -> ,`requested`= IF(`quantity` = 0, 0, `requested`); 
Query OK, 1 row affected (0,00 sec) 
Rows matched: 1 Changed: 1 Warnings: 0 

mysql> SELECT * FROM item_quantity; 
+----+----------+-----------+ 
| id | quantity | requested | 
+----+----------+-----------+ 
| 1 |  0 |   0 | 
+----+----------+-----------+ 
1 row in set (0,00 sec) 

mysql> 
+0

Я пробовал, но, начиная с IF до точки с запятой, всегда был красным подчеркнутым. Я думаю, мой синтаксис был неправильным. Как я могу его исправить? Он говорит только неожиданный токен – healer

+0

@healer - не могли бы вы разместить свой вопрос –

+0

@healer - в вашем запросе должна быть опечатка. Я добавлю образец в свой ответ –

0

Вы можете использовать BEFORE UPDATE курок. Этот триггер срабатывает непосредственно перед выполнением обновления, и вы можете обновить другое поле. Попробуйте следующее:

CREATE TRIGGER item_quantity_before_update 
BEFORE UPDATE 
    ON item_quantity FOR EACH ROW 
BEGIN 
    DECLARE old_quantity NUMBER; 
    DECLARE new_quantity NUMBER; 

    SELECT quantity INTO old_quantity; 

    SET new_quantity = old_quantity - 5; 
    IF new_quantity == 0 THEN 
     SET new.requested = 0 
    ELSE 
     SET new.requested = 1; 
    END IF; 
END; //