CodeIgniter 查询包含 OR LIKE 条件和其他非 LIKE 条件的 WHERE 子句[重复]

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

我想将以下 SQL 查询转换为 codeIgniter 活动记录格式

SELECT * FROM `relation`
WHERE (`user1` = 144 OR `user2` = 144)
AND `status` = 2
AND `action` != 1

我的尝试是这样的,

$ID = 144;
$this->db->where('user1', $ID);
$this->db->or_where('user2', $ID);
$this->db->where('status', 2);
$this->db->where('action!=', 1);

但是结果并不兼容。你能指出这里有什么问题吗?

我也可以接受不专门使用活动记录进行查询的建议。

php codeigniter activerecord codeigniter-3 query-builder
3个回答
3
投票

正确的查询是

$query = $this->db
    ->select('*')
    ->from('relation')
    ->group_start()
        ->where('user1', $ID)
        ->or_where('user2', $ID)
    ->group_end()
    ->where('status', 2)
    ->where('action !=', 1)
    ->get();

2
投票

当您在多个条件之间使用

OR
时,您必须将其括在括号中。更改您的代码如下:

$this->db->where('(user1', $ID,FALSE);
$this->db->or_where("user2 = $ID)",NULL,FALSE);
$this->db->where('status', 2);
$this->db->where('action!=', 1);

2
投票

希望这对您有帮助:

$ID = 144;
$this->db->select('*');
$this->db->from('relation');
$this->db->where('user1', $ID);
$this->db->or_where('user2', $ID);
$this->db->where('status', '2');
$this->db->where('action !=', '1');

$query = $this->db->get();
if ($query->num_rows() > 0)
{
  print_r($result);
  //return $query->result();  
}

了解更多:https://www.codeigniter.com/user_guide/database/query_builder.html#looking-for-specific-data

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