codeigniter组合和/或条件不工作

sigwle7e  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(357)

这个问题在这里已经有答案了

codeigniter活动记录多个“where”和“or”语句(2个答案)
两年前关门了。
代码点火器:

$this->db->select("item.*");
$this->db->from("items");
$this->db->where_not_in('item.ID', $Not);
$this->db->where_in('item_sub_category.Sub_category', $Sub_category);
$this->db->or_where_in('item_category.Category',$Category, NULL, FALSE);
$this->db->limit(4);
return $this->db->get()->result_array();

输出:

SELECT `item`.* 
FROM   `item` 
       LEFT JOIN `item_category` 
              ON `item_category`.`item` = `item`.`id` 
       LEFT JOIN `item_sub_category` 
              ON `item_sub_category`.`item` = `item`.`id` 
WHERE  `item`.`id` NOT IN( '12' ) 
       AND `item_sub_category`.`sub_category` IN( '65', '66', '67', '68' ) 
        OR `item_category`.`category` IN( '35', '36' ) 
LIMIT  4

预期产量:

SELECT `item`.* 
FROM   `item` 
       LEFT JOIN `item_category` 
              ON `item_category`.`item` = `item`.`id` 
       LEFT JOIN `item_sub_category` 
              ON `item_sub_category`.`item` = `item`.`id` 
WHERE  `item`.`id` NOT IN( '12' ) 
       AND (`item_sub_category`.`sub_category` IN( '65', '66', '67', '68' ) 
        OR `item_category`.`category` IN( '35', '36' )) 
LIMIT  4

有谁能告诉我如何使用活动记录来实现预期的输出?

4zcjmb1e

4zcjmb1e1#

您没有输入整个查询—但是如果是与您相关的where条件—您可以执行以下操作:

$this->db
    ->select("item.*")
    ->from("item")
    ->where_not_in('item.ID', $Not)
    ->group_start()
        ->where_in('item_sub_category.Sub_category', $Sub_category)
        ->or_where_in('item_category.Category',$Category, NULL, FALSE)
    ->group_end()
    ->limit(4);

echo $this->db->get_compiled_select();
t3irkdon

t3irkdon2#

你只需要加上 join 在活动记录中。就像下面一样。

$this->db->select("item.*");
$this->db->from("items");
$this->db->join("item_category","`item_category`.`item` = `item`.`id`","left");
$this->db->join("item_sub_category","`item_sub_category`.`item` = `item`.`id`","left");
$this->db->where_not_in('item.ID', $Not);
$this->db->where_in('item_sub_category.Sub_category', $Sub_category);
$this->db->or_where_in('item_category.Category',$Category, NULL, FALSE);
$this->db->limit(4);
return $this->db->get()->result_array();
c9x0cxw0

c9x0cxw03#

//试试这个。。

$array = array('item_sub_category.Sub_category' => $Sub_category, 'item_category.Category' => $Category);

    $this->db->select("item.*");
        $this->db->from("items");
        $this->db->join("item_category","`item_category`.`item` = `item`.`id`","left");
        $this->db->join("item_sub_category","`item_sub_category`.`item` = `item`.`id`","left");
        $this->db->where_not_in('item.ID', $Not);
        $this->db->where_in($array);
        $this->db->limit(4);
        return $this->db->get()->result_array();

相关问题