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

时间:2011-10-05 18:14:15

标签: php mysql codeigniter logic

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

我试图从表中获得星标记录。所以上面的查询是否有效?

3 个答案:

答案 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');