2010-08-14 92 views
0

我有兩個數據庫,每個數據庫都包含用戶的電子郵件地址。我寫了一個腳本,其唯一目的是查看兩個數據庫中存在哪些電子郵件地址。有條件循環內循環不匹配

說到這裏,請看下面的循環。每個循環都包含數百條記錄(我已經打印出每個記錄的結果作爲驗證)。但是,當條件找到匹配項時,條件僅匹配第一個匹配的電子郵件地址。它與最初的查詢匹配的記錄仍然「卡住」。換句話說,如果它匹配「[email protected]」,那麼所有未來的比較都是「[email protected]」。這幾乎就像我需要一個「next()」方法來從第一個數組中移動東西。

FWIW,我是一個完整的PHP noob,所以我確定有一些明顯的我在這裏失蹤。

while($member = mysql_fetch_array($members)){ 
    while($emailAddress = mysql_fetch_array($emailAddresses)){ 
     if ($member['email'] == $emailAddress['email']){ 
      echo $member['email'] . "<br/>"; 
     } 
    } 
} 
+1

這兩個數據庫是否存在於同一臺服務器上?您可以通過使用完整限定的表名創建跨越兩者的查詢。 – whiskeysierra 2010-08-14 15:37:31

+2

你實際上有兩個數據庫,還是你只有兩個表在同一個數據庫?你可以編輯包含你的SQL?正如Willi所說,這可能比做這些嵌套循環要容易得多。 – 2010-08-14 15:41:37

+0

兩個獨立的數據庫,兩個獨立的服務器。 – Huuuze 2010-08-14 15:57:46

回答

2

我認爲問題在於你循環訪問一個mysql結果集,這裏有一個內部數據指針,它在每個循環中都保持滑動1步。

嘗試將結果放入數組中。

$adresses = array(); 
while($emailAddress = mysql_fetch_array($emailAddresses)){ 
    $adresses[] = $emailAddress['email'] ; 
    } 

則數組

while($member = mysql_fetch_array($members)){ 
    if(in_array($member['email'], $adresses)){ 
    echo $member['email']; 
    } 
    } 

或者你可以重置每個循環後datapointer,不知道你是否能在MySQL結果做內檢查的結果,但通過數組循環時,它的工作原理。

+0

完美! A +給你。 – Huuuze 2010-08-14 16:00:17