使用多个IF语句进行DUPLICATE KEY UPDATE

时间:2017-05-31 20:38:44

标签: mysql pdo

所以,我有一个名为发票的表,目的是在重新提交数据时根据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') 

使用多个IF状态来实现这一点,我只尝试了一个条件但是没有工作。由于我是绑定参数,因此不确定这是SQL问题还是PDO问题。

我希望我的查询将状态更新为" Payed"如果ammount是相同的并且" partyally支付"如果新的安装量小于当前值。状态"未支付"如果记录是新的。

这是我目前的查询:

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

关于我做错了什么的任何建议?

提前致谢。

新测试(不工作)

import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
    selector: 'progress-bar',
    templateUrl: 'progress-bar.html'
})
export class ProgressBarComponent {
    @Input()                        // @Input('Percent') does not work
    PercentComplete: number = 0;

    @Output()
    PercentChange: EventEmitter<number> = new EventEmitter<number>();

    constructor() { }

    Increment() {
        this.PercentComplete ++;
        this.PercentChange.emit(this.PercentComplete);
    }

}

1 个答案:

答案 0 :(得分:0)

您应该将VALUES(net_change)与表格中的列进行比较,而不是正在分配的参数。

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