使用MySQL根据主键和不同的字段比较表中的两个字段

时间:2016-11-02 16:25:19

标签: php mysql join

关于优化的简单问题/更轻松地解决问题。

我有一张发票表,其中包含[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? (如果这是有道理的)

感谢你们给予的任何帮助!

1 个答案:

答案 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`