我想选择包含给定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')
我的表看起来像
+----+----------+-------------+-----------+
| 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 :(得分:1)
从评论中,您似乎想知道IN是如何工作的。
简单的答案是IN在单词
之后查找数组中单词之前所述的值示例一:
'banana' IN ('apple','orange','banana')
这是真的。
示例二:
1234 IN ('hello','world!')
这会产生错误。
您可以阅读有关IN here
的更多信息AND是一个逻辑运算符,只有在任一方的语句为真时才产生true。像这样:
true AND true = true
false AND true = true AND false = false
如果我们结合第一和第二例,我们得到:
'banana' IN ('apple','orange','banana')
AND
1234 IN ('hello','world!')
作为示例,一个是真的,但例外的两个是假的,这将是假的。
答案 1 :(得分:0)
您的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
(子查询),以查看该值是否在子查询返回的集合中。
答案 2 :(得分:0)
是的,这是正确的方法。通过将方法链接在一起,您可以使这更加简洁:
$query = $this->db
->where_in('order_id', $orderids)
->where_in('branch', $branch)
->get('tbl_order_data');