2013-07-17 42 views
-1

這似乎是一個非常簡單的問題,但它導致我一個荒謬的頭痛。選擇其中ID IN(列表)不工作後列表修改

這裏是我的查詢:SELECT * FROM table WHERE id IN ($list);

可以說該列表是:1,2,3,4,5,6

在查詢的第一次執行,它的偉大工程,檢索請求的行。 然後,我刪除一個值:1,2,4,5,6

忽然,查詢沒有檢索到任何內容。

我贊同$list$list顯示1,2,4,5,6

我更換IN ($list)IN (1,2,4,5,6)和它完美的作品。

我錯過了什麼?

繼承人的,去除一個值碼:

function removeFromList($id, $list){ 
$ider = ','.$id.','; 
if($list[strlen($list)-1] == ','){ 
if($list[0] != ','){ 
    $list = ','.$list; 
} 
$list = str_replace($ider, ',', $list); 
if($list[strlen($list)-1] == ','){ 
    $list[strlen($list)-1] = '';  
} 
if($list[0] == ','){ 
    $list[0] = ''; 
} 
} else { 
if($list[0] != ','){ 
    $list = ','.$list; 
} 
$list = $list.','; 
$list = str_replace($ider, ',', $list); 
if($list[strlen($list)-1] == ','){ 
    $list[strlen($list)-1] = '';  
} 
if($list[0] == ','){ 
    $list[0] = ''; 
} 
} 
return $list; 
} 
+3

發佈您的代碼?有可能是我們沒有看到的東西。 –

+0

theres沒有別的可以看到... – user1621945

+0

但顯然我們不能幫助這個小信息... – fancyPants

回答

0
What happens if you change your query to this 
SELECT * FROM table WHERE id IN ('$list'); 
+0

仍然沒有... – user1621945

0

你想用find_in_set()

SELECT * FROM table WHERE find_in_set(id, $list) 

in聲明列表代表1,2,3,4,5

另一種方法是直接把它創建列表中的SQL語句:

"SELECT * FROM table WHERE id in (".$list.")" 

這是更有效的,在這個意義上,查詢可以在id採取指數的優勢。

+0

我不認爲你可以傳遞一個列名作爲搜索字符串:FIND_IN_SET(搜索字符串,字符串列表) – user1621945