2017-02-02 170 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; //