2015-01-17 102 views
0

我得從我的數據庫中提取數據的兩個MySQL查詢。沒有進入太多細節,同時運行的結果應指派給磁盤陣列時(相關查詢之後即ARRAY1 [x]和數組2 [X]應由x憑藉SQL查詢的性質的偏移有關)。如何比較兩個數組當指數不匹配

但是,如果在其中一個查詢返回少於或多於另一個的情況下發生了某種情況,那麼偏移將會關閉,從而使我的for循環比較(在下面的代碼片段末尾)出錯。

[「companyid」〕中兩個陣列是固定的,不會改變,所以有使該陣列的索引,並通過它進行比較,而不是循環的方法嗎?請注意,['companyid']可以是任何非序號。

*SQL Query* 

     while ($row = $result->fetch()) { 
      $pastcompanies[] = array(
        'companyid' => $row['id'], 
        'name' => $row['name'], 
        'contactid' => $row['contactid'], 
        'firstname' => $row['firstname'], 
        'lastname' => $row['lastname'], 
        'email' => $row['email']   
    ); 
     } 

*SQL Query* 

     while ($row = $result->fetch()) { 
      $nowcompanies[] = array(
        'companyid' => $row['id'], 
        'name' => $row['name'], 
        'contactid' => $row['contactid'], 
        'firstname' => $row['firstname'], 
        'lastname' => $row['lastname'], 
        'email' => $row['email']   
    ); 
     } 

     for ($x=0;$x<count($pastcompanies);$x++){ 
       if ($pastcompanies[$x]['contactid']!=$nowcompanies[$x]['contactid']){ 
        echo $pastcompanies[$x]['firstname']." has been replaced by " 
        .$nowcompanies[$x]['firstname']; 
       } 
     }  
+1

你能不能在數據庫上運行這個比較查詢? SQL被設計用來做這種比較。 – Mouser

+0

'$ pastcompanies [$行[ '身份證'] =陣列('&'$ nowcompanies [$行[ '身份證'] =陣列('? – kero

回答

2

與進行比較的數據庫查詢相比,數組上的比較速度慢,不必要且不安全。使用join來比較兩個表的查詢更加健壯。

SELECT * FROM companies c 
JOIN past_companies pc 
ON pc.companyid = c.companyid 
WHERE pc.contactid != c.contactid; 

上面的代碼應該給你一個結果集,其中所有的名字都與以前不一樣。從而消除了在php上比較數組的需求。 請注意,此代碼僅僅是一個如何在數據庫上進行比較的示例。

+0

謝謝,你說得對,我應該在MySQL這樣做詢問 – dlofrodloh

相關問題