Php 如何使用“WHERE”和“IN”正确编写sql查询
我想选择包含给定ID和给定分支的记录,所以我提出了这个查询,我想知道这是否是写这个的正确方法 我正在使用代码点火器Php 如何使用“WHERE”和“IN”正确编写sql查询,php,mysql,codeigniter,logic,Php,Mysql,Codeigniter,Logic,我想选择包含给定ID和给定分支的记录,所以我提出了这个查询,我想知道这是否是写这个的正确方法 我正在使用代码点火器 $orderids = array('2', '3'); $branch = array('branch1', 'branch2'); $this->db->where_in('order_id', $orderids); $this->db->where_in('branch', $branch); $query = $this->db->g
$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 |
+----+----------+-------------+-----------+
我试图从表中获取带有星号标记的记录。因此,上面的查询对使用WHERE子句有效
..可以用英语读作顺序id为'2'或'3'且分支为'branch1'或'branch2'的记录
换句话说,它大致相当于:
WHERE (`order_id` = '2' OR `order_id` = '3')
AND (`branch` = 'branch1' OR `branch` = 'branch2')
在哪里的优势。。。在中,您可以指定许多不同的值,例如在“2”、“3”、“4”、“5”中指定order_id,甚至可以在“IN”之后放置一个SELECT子查询,以查看该值是否在子查询返回的集合中。从注释中,您似乎想知道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!')
例如,示例一为真,但示例二为假,这将返回为假。是的,这是正确的方法。通过将这些方法链接在一起,您可以使其更加简洁:
$query = $this->db
->where_in('order_id', $orderids)
->where_in('branch', $branch)
->get('tbl_order_data');
看起来还好吧?你试过了吗?是的,看起来很好,但我不知道在哪里和在一起,如何工作。这就是为什么我想问:注意,编写的查询也将返回ID为7的行,因为“2”在2,3中,“branch2”在branch1,branch2中。IN子句相互独立。您给出的查询将选择您加星号的所有行以及第7行。您是否尝试从表中获取SELECT*,其中order_id=2,branch=1,order_id=3,branch=2,这只会给您加上3行星号?非常感谢,似乎这就是我想要的查询
$query = $this->db
->where_in('order_id', $orderids)
->where_in('branch', $branch)
->get('tbl_order_data');