Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用“WHERE”和“IN”正确编写sql查询_Php_Mysql_Codeigniter_Logic - Fatal编程技术网

Php 如何使用“WHERE”和“IN”正确编写sql查询

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

我想选择包含给定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->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');