2013-04-11 126 views
0

in_array我有這樣的代碼:選擇結果與SQL

$p = $db->query("SELECT ads_id FROM ads_submissions WHERE status = '0'"); 
$c_ads = array(); 
while($row = $db->fetchAll($p)) 
{ 
    $c_ads[] = $row; 
} 

輸出

4 6 9 

我想這行添加到$ new_ads = $ DB->後WHERE

AND ads_id = !in_array('$output', $c_ads) 

若要選擇除ID 4和6以外的所有ads_id和9

$new_ads = $db->fetchOne("SELECT ads_id FROM ads_pack WHERE allowed_countries LIKE '%".$country_tr."%'"); 

但是,這永遠不能正常工作。

請幫忙嗎?

謝謝。

+0

你的目標是?爲什麼選擇狀態爲「0」的所有廣告,然後選擇全部不在此結果中?改變where子句不是更容易嗎? – sailingthoms 2013-04-11 19:35:02

+0

@sailingthoms,OP引用兩個查詢中的不同表。雖然JOIN可能在這裏工作。 – 2013-04-11 19:45:58

+0

使用連接肯定會有更好的方式和更高性能 – sailingthoms 2013-04-11 19:50:05

回答

1

你應該做這樣的

AND ads_id NOT IN (implode(',', $c_ads)) 
1

在sql中沒有這樣的東西,如in array。只有結果集。你想

AND ads_id NOT IN (4,6,9) 
+0

所以我只需要使用AND ads_id而不是($ c_ads)而沒有任何改變? – user2203703 2013-04-11 19:31:31

+0

好吧,你仍然需要內爆陣列。你不能直接在sql中嵌入一個PHP數組。例如'$ sql =「... WHERE field NOT IN(」。implode(',',$ array)。「)」'。 – 2013-04-11 19:33:14

0

你可以重寫這個使用子查詢,而不是運行2個查詢?

"SELECT ads_id FROM ads_pack WHERE allowed_countries LIKE '%".$country_tr."%' AND ads_id NOT IN (SELECT ads_id FROM ads_submissions WHERE status = '0')"