我有一个包含发票数据的 SQL 数据库。它包括“sum”和“invoice_id”列,其中存储总金额(总和),以及是否是预付款(invoice_id 包含其他发票 ID)。我需要做的是计算总金额减去首付款(如果有的话)。例如,这两行代表一个项目:发票 ID 1567 是首付款,发票 ID 1551 是最终发票。这是一张图片供参考。对于我的 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
看起来您正在使用某些 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;