带条件的两行SQL之间的计算

问题描述 投票:0回答:1

我有一个包含发票数据的 SQL 数据库。它包括“sum”和“invoice_id”列,其中存储总金额(总和),以及是否是预付款(invoice_id 包含其他发票 ID)。我需要做的是计算总金额减去首付款(如果有的话)。例如,这两行代表一个项目:发票 ID 1567 是首付款,发票 ID 1551 是最终发票。这是一张图片供参考enter image description here。对于我的 PHP 函数,在不更改该行中的数据的情况下,两个总和需要为 2902.75。

现在我计算总和的 PHP 函数是:

$result = Invoice::find_by_sql("
     SELECT 
         sum(invoices."sum") as "summary" 
     FROM 
         invoices 
     WHERE 
         estimate != 1 
     AND due_date < CURDATE() 
 ");

对于上面的拖线示例,我得到了 4063,65。

PS:我在我的应用程序的 PHP 框架中使用 Codeingniter :完整的 php 函数

/**
    ** Get sum of late
    ** return object
    **/
    public static function latePayments($option="")
    {
        if ($option == "all")
        {
            $result = Invoice::find_by_sql("
                SELECT 
                    sum(invoices.`sum`) as `summary` 
                FROM 
                    invoices 
                WHERE 
                    estimate != 1 
                    AND due_date < CURDATE() 
            ");
        }
        else
        {
            $result = Invoice::find_by_sql("
                SELECT 
                    sum(invoices.`sum`) as `summary`
                FROM 
                    invoices 
                WHERE 
                    (status = 'Open' OR status = 'Sent' OR status = 'PartiallyPaid') 
                    AND estimate != 1 
                    AND due_date < CURDATE() 
            ");
        }
        return $result[0]->summary;
    }
}

编辑1:两行sql文件的链接:File

php sql case
1个回答
0
投票

看起来您正在使用某些 Active Record 或其他 ORM。我认为使用 PHP 而不是 SQL 来查找发票和减去会更容易。像这样的东西:

$invoice = Invoice::find_by_id(<some_id>);
$down_payment_id = $invoice->invoice_id;
if ($down_payment_id === null) {
    return $invoice->sum;
}
$down_payment = Invoice::find_by_id($down_payment_id);
return $invoice->sum - $down_payment->sum;
© www.soinside.com 2019 - 2024. All rights reserved.