2011-10-05 2 views
0

주어진 ID와 주어진 Branch가 포함 된 레코드를 선택하여이 쿼리를 작성하고 이것이 올바른 방법인지 여부를 알고 싶습니다."WHERE"및 "IN"을 사용하여 SQL 쿼리를 올바르게 작성하는 방법

메신저 사용 CodeIgniter는

$orderids = array('2', '3'); 
$branch = array('branch1', 'branch2'); 

$this->db->where_in('order_id', $orderids); 
$this->db->where_in('branch', $branch); 
$query = $this->db->get('tbl_order_data'); 

SELECT * 
FROM (`tbl_m_order_collection_data`) 
WHERE `order_id` IN ('2', '3') 
AND `branch` IN ('branch1', 'branch2') 

내 테이블

,536,913과 같은 쿼리를 만드는
+----+----------+-------------+-----------+ 
| ID | order_id | branch  | item_code | 
+----+----------+-------------+-----------+ 
| 1 |  1 | branch1  | 4R1  | 
| 2 |  1 | branch2  | 4R11  | 
| 3 |  1 | branch2  | ACS20x20 | 
| 4 |  *2 | branch1  | ACS20x27 | 
| 5 |  *2 | branch1  | ACS20x20 | 
| 6 |  1 | branch1  | ACS20x20 | 
| 7 |  2 | branch2  | ACS20x27 | 
| 8 |  *3 | branch2  | ACS20x20 | 
+----+----------+-------------+-----------+ 

나는 무엇을 시도하는 것이 테이블에서 별표 표시된 레코드를 얻는 것입니다. 위의 쿼리는 사용하기에 유효합니까?

+0

괜찮아요? 너 * 시도해 봤어? – Amber

+0

예는 잘 작동하는 것 같지만 어디서 어떻게 작동하는지 잘 모릅니다. thats why of why ask –

+1

'2'는 (2,3)에 있고 'branch2'는 (branch1, branch2)에 있기 때문에 작성된 쿼리는 ID # 7 행을 반환한다는 점에 유의하십시오. 'IN' 절은 서로 독립적입니다. – Amber

답변

0

귀하의 WHERE 절은 ..

WHERE `order_id` IN ('2', '3') AND `branch` IN ('branch1', 'branch2') 

은 그 order_id는 '2'또는 '3'과 그 branch 'BRANCH1'또는 '브랜치 인 기록 "로, 영어로 읽을 수 ..could. ' "즉

, 그것은 거의 비슷이다 :

WHERE (`order_id` = '2' OR `order_id` = '3') 
    AND (`branch` = 'branch1' OR `branch` = 'branch2') 

WHERE ... IN의 장점은 많이 지정할 수 있다는 것입니다 예를 들어 order_id IN ('2', '3', '4', '5')이고 IN 뒤에 SELECT (하위 쿼리)을 배치하여 하위 쿼리에서 반환 된 값이 "in"인지 확인할 수도 있습니다.

1

의견에서 IN 작동 방식을 알고 싶습니다.

간단히 말하면 IN 단어

일례 후 배열 단어 앞에 언급 된 값을 보이는 점이다

'banana' IN ('apple','orange','banana') 

이 해당 산출한다.

두 예 :

1234 IN ('hello','world!') 

이 거짓 산출한다.

당신은 here

IN에 대한 자세한 내용 및 논리 연산자이며 양쪽에 보테 문에 해당하는 경우에만 진정한 산출 할 수 있습니다. 이처럼 :

true AND true = true 

false AND true = true AND false = false 

우리가 예 하나를 결합하면

2 개는 우리가 얻을 : 예 하나에 해당했지만, exampe 두 거짓으로

'banana' IN ('apple','orange','banana') 
AND 
1234 IN ('hello','world!') 

,이 거짓으로 돌아 올 것이다.

0

예, 올바른 방법입니다. 그래도이 방법을 함께 연결하면 훨씬 더 간결해질 수 있습니다.

$query = $this->db 
    ->where_in('order_id', $orderids) 
    ->where_in('branch', $branch) 
    ->get('tbl_order_data'); 
관련 문제