使用activerecords的SQL查询

时间:2018-05-17 06:43:27

标签: php codeigniter activerecord codeigniter-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);

但结果不兼容。你能指出这里的东西吗?

对于没有专门为查询使用活动记录的建议,我也没问题。

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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 :(得分: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