2013-05-04 1 views
0

게시물의 제목이 적절한 지 모르겠습니다. 나는 다음과 같은 테이블동일한 열을 쿼리하는 AND가 다중 인 Sql 문

enter image description here

일부 항목 parsed_array와 PHP의 배열을 가지고있다. 내가 원하는 것은 parsed_array의 모든 항목을 가진 모든 슈퍼마켓 ID를 찾는 것입니다.

예를 들어, parsed_array[111,121,131]이 포함 된 경우이 모든 항목이 포함 된 슈퍼마켓 ID 인 21이 필요합니다.

나는 그런 식으로 그것을 시도하십시오 parsed_array에서 하나 개의 항목 만있을 경우 결과는 위의

SELECT SupermarketID 
FROM productinsupermarket 
WHERE ItemID=parsed_array[0]; 

동일하기 때문에 올바르지 만

$this->db->select('SupermarketID'); 
$this->db->from('productinsupermarket'); 
for ($i=0; $i<sizeof($parsed_array); $i++) 
    { 
     $this->db->where('ItemID', $parsed_array[$i]); 
    } 
$query = $this->db->get(); 
return $query->result_array(); 

이상이있는 경우 한 항목보다 두 개라고 말하면

SELECT SupermarketID 
FROM productinsupermarket 
WHERE ItemID=parsed_array[0] 
AND ItemID=parsed_array[1]; 

물론 돌아갑니다. 빈 테이블. 어떤 생각이 어떻게 풀릴 수 있습니까?

답변

1

,

if(count($parsed_array) > 0) 
{ 
    $this->db->where_in('ItemID', $parsed_array); 
} 

Active record class in codeigniter

+1

이것이 실제로 문제를 해결했다면 나는 그 질문을 오해했다. :) –

0

IN 절 또는 여러 논리합을 시도해보십시오

SELECT SupermarketID 
FROM productinsupermarket 
WHERE ItemID=parsed_array[0] 
OR ItemID=parsed_array[1]; 
2

이 원하는 결과를 생성하는 적어도 두 가지 방법이 있습니다, 하나 자체 조인 (항목의 동적 번호를 생성 할 수없는 재미) 또는 사용 IN, GROUP BYHAVING.

정말 어떻게 CodeIgniter의를 사용하여 생성하는 방법을 말할 수 없다, 난 당신이 내가 :)

SELECT SupermarketID 
FROM productinsupermarket 
WHERE ItemID IN (111,121,131)  -- The 3 item id's you're looking for 
GROUP BY SupermarketID 
HAVING COUNT(ItemId) = 3;   -- All 3 must match 

An SQLfiddle to test with을 나보다 그에서 더 낫다 가정합니다.

편집 : @ypercube는 ItemId가 SupermarketID에 대해 두 번 이상 나타날 수 있다고 언급 할 때 COUNT(DISTINCT ItemId)을 사용하여 모든 발생을 계산하는 대신 고유 한 행만 계산하려고합니다. 당신은 아래 CodeIgniter의에서 where_in을 사용할 수 있습니다

+1

두 과소 추정치이다; 다음은 같은 문제 (관계형 부문)에 대한 10 개 이상의 답변과 비슷한 질문입니다. [수 많은 관계를 통해 SQL 결과를 필터링하는 방법] (http://stackoverflow.com/questions/7364969/how-to- filter-sql-results-in-a-has-relation을 통해) –

+0

@ypercube 흥미로운 링크, 나는이 두 가지를 만났습니다 :) 감사. –

+0

내 +1이 있습니다. 'GROUP BY/HAVING COUNT = n'은 가장 많이 쓰이고 쓰기 쉽다. (대개 동적 인 SQL을 필요로하지 않는다.) 나는 당신이'(ItemID, SupermarketID)'조합이 유일한 경우에만 작동한다는 것을 추가해야한다고 생각한다. 그렇지 않으면 조건은 'HAVING COUNT (DISTINCT ItemId) = 3; ' –