[英]how to write sql query correctly with “WHERE” and “IN”
我想選擇包含給定ID和給定Branch的記錄,所以我提出了此查詢,我想知道這是否是編寫此查詢的正確方法
我正在使用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')
我的桌子看起來像
+----+----------+-------------+-----------+
| 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 |
+----+----------+-------------+-----------+
我正在嘗試的是從表中獲取帶有星號的記錄。 所以上面的查詢是否可以使用?
從評論看來,您似乎想知道IN的工作原理。
簡單的答案是IN在單詞之后的數組中查找單詞之前聲明的值
范例一:
'banana' IN ('apple','orange','banana')
這產生了事實。
示例二:
1234 IN ('hello','world!')
這產生了錯誤。
AND是邏輯運算符,並且僅當任一側的兩個語句均為true時才產生true。 像這樣:
true AND true = true
false AND true = true AND false = false
如果我們將示例一和示例二結合在一起,則會得到:
'banana' IN ('apple','orange','banana')
AND
1234 IN ('hello','world!')
由於示例一是正確的,但示例二是錯誤的,因此這將作為錯誤返回。
您的WHERE
子句。
WHERE `order_id` IN ('2', '3') AND `branch` IN ('branch1', 'branch2')
..可以用英語閱讀為“其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')
,甚至可以在后面加上SELECT
(子查詢) IN
以查看該值是否在子查詢返回的集合中。
是的,這是正確的方法。 通過將方法鏈接在一起,您可以使其更加簡潔:
$query = $this->db
->where_in('order_id', $orderids)
->where_in('branch', $branch)
->get('tbl_order_data');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.