2013-10-24 179 views
-1

這似乎對任何人都不復雜,但它對我來說。複雜的Mysql查詢 - PHP

我有一個使用IN子句的mysql查詢。它收集與PHP陣列匹配的表中的所有數據。該陣列被稱爲$IdArray。對於這個示例的目的可以說$IdArray包含這些變量,['0','1','2','3']。因此,這裏是我的代碼,使用查詢,

$secondArray = array(); 
    function apply_quotes($item){ 
     return "'" . mysql_real_escape_string($item) . "'"; 
    } 
    $idQuotes = array_map('apply_quotes', $IdArray); 
    $query = "SELECT * FROM ids WHERE id IN (" . join(',', $idQuotes) . ")"; 
    $results = mysql_query($query); 
    while($row = mysql_fetch_array($results)){ 
     if($row['id']){ 
       $secondArray[] = "YES"; 
     } 
     else{ 
       $secondArray[] = "NO"; 
      } 
    }//end while loop 

正如你可以告訴我改變$IdArray,因此它可以被放置到mysql_query()功能。現在$secondArray是我嘗試存儲響應的數組。我想要做的是如果存儲在$IdArray中的一個數字存儲在ids表中,則將YES置於$secondArray中。但是,如果$IdArray中的數字未存儲在ids表中,則它會將NO存儲到$storedArray中。

舉個小例子,(我想要發生的事情),正如前面所說的,讓我們說$IdArray包含['0','1','2','3']。 在表ids中存儲號碼13。所以當查詢運行時$storedArray將包含這個['NO','YES','NO','YES']

目前我的代碼不這樣做!當$IdArray中的數字存儲在ids表中時,它所做的只是存儲YES。所以當查詢運行時(使用上面的相同變量)$secondArray將存儲這個['YES','YES']

當號碼沒有存儲在ids表中時,我如何獲得它以將NO存儲到$secondArray中?

+0

這是預期的行爲。 – hjpotter92

+0

爲什麼要麻煩評論?顯然我在問一個問題。你沒看過最後一句話嗎? – user2861085

回答

0

開始從$IdArray基於數值數組中填寫:

$secondArray = array_fill_keys($IdArray, "NO"); 

然後使用您的查詢,並循環改變元素YES爲存在於表中的每一行。

while ($row = mysql_fetch_array($results) { 
    $secondArray[$row['id']] = "YES"; 
} 
+0

這是一個好主意,但是當我回復結果時,它看起來像這樣:[[「0:NO」,「1:YES」,「2:NO」,「3:YES」]'我不想要數字或引號內的冒號。我如何刪除數字? – user2861085

+0

我的代碼沒有這樣做,它只是將元素設置爲「YES」或「NO」。 – Barmar