2013-07-17 2 views
-1

이것은 매우 간단한 문제처럼 보입니다.하지만 그게 우스꽝스런 두통의 원인입니다. SELECT * FROM table WHERE id IN ($list);select where ID (목록) 수정 된 목록 이후에 작동하지 않음

목록입니다 말할 수 있습니다 :

여기 내 쿼리입니다 쿼리의 첫 번째 실행에 1,2,3,4,5,6

, 그것은 좋은 작품, 요청 된 행을 검색합니다. 그런 다음 하나의 값을 제거합니다. 1,2,4,5,6

갑자기 쿼리에서 아무것도 검색하지 않습니다.

은 내가 IN (1,2,4,5,6)IN ($list) 교체 $list$list 표시 1,2,4,5,6

에코 그것은 완벽하게 작동합니다.

무엇이 누락 되었습니까? 하나 개의 값을 제거

을 Heres 코드 :

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

그 밖의 아무것도보고 싶지 않습니다 ... – 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()를 사용하려면이 다음 in 문에서

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

목록이 단일1,2,3,4,5을 나타냅니다.

대안은 직접의 목록과 SQL 문을 작성하는 것입니다 :

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

이 쿼리는 id에 인덱스를 활용할 수 있다는 점에서 더 효율적입니다.

+0

검색 문자열로 열 이름을 전달할 수 있다고 생각하지 않습니다. FIND_IN_SET (검색 문자열, 문자열 목록) – user1621945