2013-03-14 135 views
0

我想從我的數據庫中獲取項目的列表,這些列表當前不在我的項目數組中。NOT IN WHERE子句錯誤

我研究的是「NOT IN」是做多!=「不等於」大批量的完美解決方案。

但我的代碼來生成列表:

echo $query = sprintf("SELECT * FROM %s WHERE profile_id='%s' AND id NOT IN (%s)", $table_array[$item], $profile_id, implode(',', $shop_window_items)); 

導致此錯誤:

SELECT * FROM event WHERE profile_id='945b4dbf5bf8ee1ac08a73e9e25a939772c9c9b8' AND id NOT IN (4d96b83d18a8c2db79089ac002e346fd9dea5c43,3803bb535015174e9675090fbb680a5f286ba6bf,58f07f83a8ea10ec4db9c8b7c7f39f0a6c3a2079,57c2db2ce32925bcb49b83e22513ca74cc9bcadc)Unknown column '4d96b83d18a8c2db79089ac002e346fd9dea5c43' in 'where clause 

誰能告訴我什麼即時做錯了什麼?

在此先感謝

+0

其實裏面,非常大的數量,而不是遠非完美。很簡單,它很慢。更好的選項不存在,取決於數據庫類型,減/除。 – 2013-03-14 00:50:29

+0

通過大批量我的意思是,高達8個值,所以在高效化,此功能,其對我的問題 – cwiggo 2013-03-14 00:56:24

回答

3

你需要周圍的字符串單引號,否則會被認爲是系統名稱。

...NOT IN ('%s')", $table_array[$item], $profile_id, implode("','", ... 
     ^^            ^^ 
+0

非常實用的你的那個人,信譽++ :) – cwiggo 2013-03-14 00:56:58

0

敢肯定你需要周圍的值引號IN

echo $query = sprintf("SELECT * FROM %s WHERE profile_id='%s' AND id NOT IN (%s)", $table_array[$item], $profile_id, "'" . implode("','", $shop_window_items) . "'"); 
+0

還需要%s'左右'報價 – Kermit 2013-03-14 00:49:50

+0

我把它們在內爆的兩邊?可能不如Aarolama的解決方案漂亮。 – 2013-03-14 00:59:17

+0

這將只在*字符串之間放置單引號,而不是在開頭和結尾;因此需要''s''附近的單引號 – Kermit 2013-03-14 01:03:09