2016-05-24 25 views
0

Nicht sicher, wie das zu fragen, aber ich habe eine Datenbank von Produkten und deren Preisen. Der Preis besteht aus 3 Spalten (aktueller Preis, Rabattpreis, vorheriger Preis).PHP Mysql Feld Wert basierend auf einem anderen Feld Wert

Ich benutze fgetcsv(), um ein CSV neue Datensätze lesen dann die Mysqli Abfrage unten um neue Datensätze zu meiner Datenbank einzufügen oder zu aktualisieren:

$query = "INSERT INTO products (prodname,currprice,prevprice,discprice) VALUES ('$EachRow[0]','$EachRow[1]','$EachRow[2]','$EachRow[3]') ON DUPLICATE KEY UPDATE currprice='$EachRow[1]';";

Das Problem für bestehende Produkte. Ich möchte nur ihren aktuellen Preis aktualisieren, wenn ihr Preis sich von dem aktuellen Preis unterscheidet, und um sie zu aktualisieren, muss der neue Preis verwendet werden. Ich war etwas in mysqli Hoffnung, wie

"UPDATE IF $EachRow[1]<>currprice SET prevprice=currprice,currprice='$EachRow[1]'"

Grundsätzlich für bestehende Datensätze, wenn der aktuelle Preis hat sich geändert, ich möchte den vorherigen currprice als prevprice aufgezeichnet, bevor currprice auf die neue $ EachRow Aktualisierung [1].

Gibt es eine Möglichkeit, dies zu erreichen? Können wir IF-Anweisungen in der mysqli-Abfrage erstellen?

Antwort

0

Ja, können Sie IF Klausel nach dem Gebrauch Duplicate Key Update

INSERT INTO tbl (name, some_column, some_other) 
VALUES (username, some_data) 
ON DUPLICATE KEY UPDATE 
some_other = IF(some_other > somevalue, "in_case_if_cond_is_true", "in_case_if_cond_is_false") 

Diese Flow Control Operators genannt werden, MariaDB Steuerfluss Knowledge Base

Laut Maria DB

IF(expr1,expr2,expr3) 

Wenn expr1 ist TRUE(expr1 <> 0 and expr1 <> NULL) dann IF() gibt expr2 zurück; andernfalls gibt es expr3

+0

ist '>' das Recht und die einzige Betreiber für 'nicht gleich zu "in diesen Fällen? – jay

+0

AFAIK alle Betreiber werden arbeiten –

+0

Das ist genial! Vielen Dank. – jay

0

können Sie normalen verwenden, wo Bedingung

UPDATE table_name SET `prevprice` = `currprice`, `currprice`='$EachRow[1]' WHERE `currprice` != '$EachRow[1]' 

Verwendung Anführungszeichen (') mit der Variable, wenn Sie benötigen

Verwandte Themen