2016-11-02 4 views
0

問題に近づく最適化/簡単な方法についての簡単な質問。MySQLを使用して主キーと異なるフィールドに基づいてテーブル内の2つのフィールドを比較します

私は、フィールドでの請求書のテーブルを持っている[企業ID、invoiceid、日付、金額、ステータス]

私はと異なる日付の(同じ会社の)2枚の請求書間のすべての違いを見つけるために探していますその金額がまったく変わったかどうか確認してください。

私が現在行っていることは、最適化したり、1つまたは2つのクエリにすることができると思うが、どうやって行うのか、あるいは間違ったものを探しているだけではわからない。

現在のコード:

$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"; 

     } 
    } 

} 

ここで明らかな問題は、私はDBに他の日付の請求書ごとに、毎回のポーリングを抱えているということです。私はJOINはここで動作すると思っていたが、別の量に基づいてテーブル上の別のクエリでJOINを実行する方法がわからないのですか? (それが意味をなさない場合)

お手数をおかけしていただきありがとうございます!

答えて

0

私はあなたが1つの自己結合でそれを行うことができると思います。次のクエリを試してみてください

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` 
関連する問題