令人困惑的查询

时间:2013-03-19 03:00:38

标签: sql codeigniter join left-join

我很遗憾地问这个愚蠢的问题,但我对这个问题感到有点困惑。

$this->db->select('user_package.status,user_package.remaining,user_package.date,package.pname,package.pcount');
$this->db->join('user_package','user_package.pid=package.pid','left');
$this->db->where('user_package.status','Active');
$this->db->or_where('user_package.status','Pending');
$this->db->where('user_package.uid',$rows->uid);
$user_package=$this->db->get('package');

这里是mysql面板中的类似查询,我运行结果检查输出

Select up.status,up.remaining,up.date,p.pname,up.uid,p.pcount FROM user_package up LEFT JOIN package p ON up.pid=p.pid where up.status="Active" OR up.status="Pending" AND up.uid=7

,这是查询的输出

mysql output

我想要的是只查找uid为7的行并检查其状态是Pending还是Active。但输出是不同的。它用7和8 uid取出Pending和Active记录。

2 个答案:

答案 0 :(得分:0)

而不是使用$ this-> db->其中尝试使用$ this-> db-> where_in

这应该仅将结果限制为您需要的ID。

e.g。

$this->db->select('user_package.status,user_package.remaining,user_package.date,package.pname,package.pcount');
$this->db->join('user_package','user_package.pid=package.pid','left');
$this->db->where('user_package.status','Active');
$this->db->or_where('user_package.status','Pending');
$this->db->where_in('user_package.uid',$rows->uid);
$user_package=$this->db->get('package');

答案 1 :(得分:0)

你必须这样做

$select =   array(
                'up.status',
                'up.remaining',
                'up.date',
                'p.pname',
                'up.uid',
                'p.pcount'  
            );
$status =   array('Active','Pending');      

$this->db
        ->select($select)
        ->from('user_package up')
        ->join('package p','up.pid = p.pid','left')
        ->where_in('up.status',$status)
        ->where('up.uid',$rows->uid)
        ->get();