2017-02-02 1 views
0

Ich habe eine Tabelle namens item_quantity mit 2 Feldern, Menge und angefordert. Ich habe eine Abfrage, die die Feldmenge jedes Mal aktualisiert, wenn ein Kunde kauft. Das Problem ist, ich möchte die Spalte auf 0 aktualisiert, wenn die Menge 0 wird. Das ist, was ich bisher versucht habe.Aktualisieren Sie eine andere Spalte während einer Update-Abfrage auf der Grundlage des neuen Werts

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

Aber der Fall ist rot unterstrichen. Ich weiß nicht, ob es Syntax oder logischer Fehler ist. Wie werde ich das tun? Vielen Dank im Voraus! [This is what i got]1

Antwort

1

Sie können die Aktualisierung ausführen, die angefordert wird, nachdem Sie item_quantity festgelegt haben. Dann können Sie direkt vergleichen item_quantity wie folgt aus:

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

Probe

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

Ich habe versucht, aber beginnend von IF Semikolon seine immer rot unterstrichen. Ich denke, meine Syntax war falsch. Wie kann ich es reparieren? Es sagt nur unerwartete Token – healer

+0

@healer - können Sie bitte Ihre Anfrage –

+0

@healer - es muss ein Tippfehler in Ihrer Abfrage. Ich habe ein Beispiel in meiner Antwort –

0

Sie einen BEFORE UPDATE Trigger verwenden können. Dieser Trigger wird ausgelöst, kurz bevor das Update ausgeführt wird, und Sie können das andere Feld aktualisieren. Versuchen Sie folgendes:

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; // 
Verwandte Themen