关于优化的简单问题/更轻松地解决问题。
我有一张发票表,其中包含[companyID,invoiceid,date,amount,status]字段
我希望找到不同日期的两张发票(针对同一家公司)之间的所有差异,以查看金额是否发生了变化。
我目前正在做的事情我认为可以更好地优化或归结为一两个查询,但我不确定如何这样做或者我只是在搜索错误的内容。
当前代码:
$getPreviousInvoices = mysql_query("SELECT `accountid`,`amount` FROM `invoices` WHERE `date` = '$dateFrom'",$db);
while($previousInvoice = mysql_fetch_array($getPreviousInvoices))
{
$accountID = $previousInvoice['accountid'];
$getNewInvoice = mysql_query("SELECT `amount` FROM `invoices` WHERE `date` = '$dateTo' AND `accountid` = '$accountID'",$db);
if($newInvoice = mysql_fetch_array($getNewInvoice))
{
$newAmount = $newInvoice['amount'];
$oldAmount = $previousInvoice['amount'];
if($newAmount != $oldAmount)
{
echo"{$accountID} : {$oldAmount} changed to {$newAmount} \n";
}
}
}
这里显而易见的问题是,我每次都要为每个其他日期的发票轮询数据库。我认为JOIN会在这里工作,但是我不确定如何根据不同的数量在表上使用不同的查询来进行JOIN? (如果这是有道理的)
感谢你们给予的任何帮助!
答案 0 :(得分:0)
我认为你可以通过一次自我加入来做到这一点。您可以尝试以下查询
SELECT a.`accountid`, a.`amount`, b.`amount` ,a.`date`,b.`date`
FROM `invoices` as a, `invoices` as b
WHERE a.accountid = b.accountid
AND a.`date` = '$dateFrom' AND b.date = '$dateTo'
AND a.`amount` <> b.`amount`