我想选择包含给定ID和给定分支的记录,所以我提出了这个查询,我想知道这是否是写这个
的正确方法我正在使用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')
my table looks like
+----+----------+-------------+-----------+
| 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')
结果为true。
两个例子:
1234 IN ('hello','world!')
返回false。
你可以在这里阅读更多关于IN的信息
AND是一个逻辑运算符,只有当两边的语句都为真时才返回真。这样的:
true AND true = true
false AND true = true AND false = false
如果我们把例一和例二结合起来,我们得到:
'banana' IN ('apple','orange','banana')
AND
1234 IN ('hello','world!')
如果示例1为真,但示例2为假,则返回为假。
您的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')
,您甚至可以在IN
之后放置SELECT
(子查询),以查看该值是否"在"子查询返回的集合中。
是的,这是正确的做法。您可以通过将这些方法链接在一起来使它更简洁:
$query = $this->db
->where_in('order_id', $orderids)
->where_in('branch', $branch)
->get('tbl_order_data');