0

このばかげた質問をして本当に申し訳ありませんが、クエリについて少し混乱しています。

$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出力

私が望むのは、uid が 7 の行だけを見つけて、それらのステータスが Pending または Active であるかどうかを確認することです。しかし、出力は異なります。uid が 7 と 8 の Pending および Active レコードを取り出します。

4

2 に答える 2

0

$this->db->where を使用する代わりに、 $this->db->where_in を使用してみてください

これにより、必要な ID のみに結果が制限されます。

例えば

$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');
于 2013-03-19T03:19:22.893 に答える
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();
于 2013-03-19T03:38:32.793 に答える