Also habe ich eine Tabelle namens Rechnungen, die darauf abzielt, ihren Spaltenstatus entsprechend dem Betrag zu aktualisieren, wenn Daten erneut gesendet werden.ON DUPLICATE KEY UPDATE mit mehreren IF-Anweisungen
Zum Beispiel, ich habe diesen Satz von Ergebnissen:
<table>
<thead>
<tr>
<th>Sap Code</th>
<th>Document No.</th>
<th>Description</th>
<th>Net Change</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<tr>
<td>8000000</td>
<td>123456</td>
<td>March invoice A</td>
<td>Not Paid</td>
</tr>
</tbody>
Verwendung mehrere IF statemets dies zu erreichen, habe ich versucht, mit nur einem Zustand, aber funktioniert nicht. Nicht sicher, ob dies ein SQL-Problem oder ein PDO-Problem ist, da ich Params binde.
Ich möchte, dass meine Abfrage den Status auf "Bezahlt" aktualisiert, wenn die Ammount gleich ist und "Partyy bezahlt", wenn die neue Ammount weniger als die aktuelle ist. Status "Nicht bezahlt", wenn der Datensatz neu ist.
Dies ist meine aktuelle Abfrage:
INSERT INTO invoice (sap_code, document_number, description, net_change, status)
VALUES (:sap_code,:document_number,:description,:net_change, 'Not payed')
ON DUPLICATE KEY UPDATE
sap_code= :sap_code, document_number= :document_number, description= :description,
status = if(VALUES(net_change) = :net_change, VALUES(status), 'Paid')
Jeder Vorschlag auf, was ich falsch mache?
Vielen Dank im Voraus.
NEW TEST (FUNKTIONIERT NICHT)
ON DUPLICATE KEY UPDATE
sap_code= :sap_code, document_number= :document_number, description= :description,
status = CASE WHEN :net_change = net_change
THEN 'Paid'
ELSE 'Partially Paid' END,
net_change = :net_change
'VALUES (net_change)' ist das gleiche wie ': net_change', so dass das' IF' immer wahr ist. – Barmar
Ja, aus dem Handbuch: "Mit anderen Worten, VALUES (col_name) in der ON DUPLICATE KEY UPDATE-Klausel bezieht sich auf den Wert von col_name, der eingefügt werden würde, wenn kein Duplikatschlüssel-Konflikt aufgetreten wäre." – miken32