2011-10-05 89 views
0

我想選擇包含給定ID和給定分支的記錄,所以我想出了這個查詢,我想知道這是否是正確的方式來編寫這個如何正確使用「WHERE」和「IN」編寫SQL查詢

IM使用笨

$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') 

我的表看起來像

+----+----------+-------------+-----------+ 
| 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

是的似乎工作正常,但我不知道如何在哪裏和IN與AND工作。這就是爲什麼我雖然要求 –

+1

請注意,寫入的查詢也會返回ID爲7的行,因爲'2'在(2,3)中,'branch2'在(branch1,branch2)中。 「IN」條款彼此獨立。 – Amber

回答

0

WHERE條款..

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

..could閱讀,英語,爲「記錄,其order_id是 '2' 或 '3',其branch是 'BRANCH1' 或「BRANCH2。 「」

換句話說,它是大致相當於:

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(subquery)來查看子查詢返回的值是否在「in」中。

1

從評論看來,你似乎想知道如何工作。

簡單的回答是,在查找字

例一後的陣列中的字之前規定的值:

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

這產生真。

實施例二:

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

這產生假。

你可以閱讀更多關於here

,是一個邏輯運算符,如果博特兩邊的陳述是真實的,只有得到正確的。就像這樣:

true AND true = true 

false AND true = true AND false = false 

如果我們結合實例一和二,我們得到:

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

如例一個是真實的,但exampe兩次被假的,這會回來爲假。

0

是的,這是正確的做法。你可以通過鏈接方法使這更簡潔:

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