したがって、データが再提出されたときにammount値に従って列ステータスを更新することを目的とした請求書という表があります。複数のIF文を使用した重複キー更新
は、例えば、私はこの結果のセットがあります。statemetsはこれを達成するためのIF
<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>
使用複数を、私はただ一つの条件と試みたが、動作しません。私がparamsにバインドしているので、これがSQLの問題かPDOの問題かどうかはわかりません。
ammountが同じ場合はステータスを「Payed」に、新しいammountが現在の値よりも小さい場合は「パーティーペイ」にステータスを更新したいと思います。レコードが新規の場合はステータス「未払い」。
これは私の現在のクエリです:
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')
私が間違ってやって上の任意の提案?
ありがとうございます。 (動作しない)
NEW TEST
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)'は ':net_change'と同じですので、' IF'は常にtrueになります。 – Barmar
はい、マニュアルから: "つまり、ON DUPLICATE KEY UPDATE句のVALUES(col_name)は、挿入されるcol_nameの値を参照し、重複キーの競合が発生していないことを示します。 – miken32