Codeigniter 查询可在 WHERE 子句中正确封装 AND 和 OR 条件

问题描述 投票:0回答:7

我想要一个 CodeIgniter 从具有三个条件的表中选择查询。

  1. wrk_fld_exc = 140
  2. wrk_cs_sts = 'Open'
  3. wrk_dlvrd_sts = 'Delivered' OR wrk_cl_sts = 'Success'

第三个条件是 AND 条件包含 OR 条件。 第一个和第二个是 AND 条件。

php codeigniter activerecord query-builder logical-grouping
7个回答
34
投票

你可以这样编码:

       $this->db->where('wrk_fld_exc',140);
       $this->db->where('wrk_cs_sts','open');
       $where = '(wrk_dlvrd_sts="open" or wrk_cl_sts = "Success")';
       $this->db->where($where);

7
投票

codeigniter 在查询中使用自己的 OR 子句语法

$this->db->or_where('wrk_cl_sts','Success'); 

要在 where 子句中使用 AND,请使用

$this->db->where('');
两次


5
投票

像这样

 $this->db->where('wrk_fld_exc',140);
 $this->db->where('wrk_cs_sts','open');
 $this->db->where('wrk_dlvrd_sts ','Delivered');
 $this->db->or_where('wrk_cl_sts','Success');

3
投票

我想添加一些信息

Codeigniter 3.1.11
:

Query grouping
中有一个
Query Builder Class

所以本的回答会是这样的:

public function some_function()
    {
        $this->db->where("wrk_fld_exc",140);
        $this->db->where("wrk_cs_sts","Open");
        $this->db->group_start();
        $this->db->where("wrk_dlvrd_sts","Delivered");
        $this->db->or_where("wrk_cl_sts","Success");
        $this->db->group_end();
        return $this->db->get("some_table");
    }

检查后:

        echo $this->db->last_query();

它将产生 SQL:

SELECT * FROM `some_table` WHERE `wrk_fld_exc` = 140 AND `wrk_cs_sts` = 'Open' AND ( `wrk_dlvrd_sts` = 'Delivered' OR `wrk_cl_sts` = 'Success' )

进一步阅读: Codeigniter 手册


0
投票
 $this->db->where('wrk_fld_exc',140);

 $this->db->where('wrk_cs_sts','open');

 $where = '(wrk_dlvrd_sts="open" or wrk_cl_sts = "Success")';

 $this->db->where($where);

0
投票

您必须使用

group_start()
group_end()
封装 OR 条件的子集。
or_where()
get_where()
是在这种情况下最简洁的方法,它们都高兴地收到一组关联的条件。

return $this->db
    ->start_group()
    ->or_where([
        'wrk_dlvrd_sts' => 'Delivered',
        'wrk_cl_sts' => 'Success',
    ])
    ->group_end()
    ->get_where(
        'wrk_table',
        ['wrk_fld_exc' => 140, 'wrk_cs_sts' => 'Open']
    )
    ->result();

渲染的 SQL 将类似(间距和引用可能会有所不同)

SELECT *
FROM wrk_table
WHERE (
    `wrk_dlvrd_sts` = 'Delivered'
    OR `wrk_cl_sts` = 'Success'
)
AND `wrk_fld_exc` = 140
AND `wrk_cs_sts` = 'Open'

另请参阅:在 WHERE 子句中使用 AND 和 OR 条件组合构建 CodeIgniter


-1
投票
    $this->db->select("*");
    $this->db->from("table_name");
    if($condition1 != ''){
        $this->db->where('wrk_fld_exc', 140);
    }
    if($condition2 != ''){
        $this->db->where('wrk_cs_sts ', open);
    }
    //You can limit the results
    $this->db->limit(5);
    $q = $this->db->get();
    return $q->result();

这是您可以在 codeigniter 中以这种方式实现的查询的基本结构。如果需要,您可以添加条件。

© www.soinside.com 2019 - 2024. All rights reserved.