2017-05-31 1 views
0

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 
+1

'VALUES (net_change)' ist das gleiche wie ': net_change', so dass das' IF' immer wahr ist. – Barmar

+0

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

Antwort

0

Sie VALUES(net_change) mit der Spalte in der Tabelle sollten zu vergleichen, nicht der Parameter zugeordnet ist.

ON DUPLICATE KEY UPDATE 
    sap_code= :sap_code, document_number= :document_number, description= :description, 
    status = IF(:net_change = net_change, 'Paid', VALUES(status)), 
    net_change = :net_change 
+0

Dies funktioniert nicht. Außerdem bin ich nicht verbindlich: Status – Nelson

+0

Ich bin ein wenig verwirrt über das, was Sie versuchen zu tun. Warum würden Sie denselben Code verwenden, um eine neue Rechnung hinzuzufügen und einen Teil oder die gesamte vorhandene Rechnung zu begleichen? – Barmar

+0

Da in meiner Anwendung der Benutzer die Informationen über Microsoft Excel-Dokumente übermittelt. – Nelson

Verwandte Themen