【问题标题】:confusing query [duplicate]令人困惑的查询[重复]
【发布时间】:2013-03-07 14:42:05
【问题描述】:

我很抱歉问这个愚蠢的问题,但我对这个查询有点困惑。

$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

这是查询的输出

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

【问题讨论】:

  • 你认为的(where up.status="Active" OR up.status="Pending") AND up.uid=7可能被解释为where up.status="Active" OR (up.status="Pending" AND up.uid=7)
  • 你是对的。但是在codeigniter中怎么做呢?
  • 尝试回显查询。使用这个,回显 $this->db->last_query();并相应地操作查询

标签: sql codeigniter join left-join


【解决方案1】:

不要使用 $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');

【讨论】:

    【解决方案2】:

    你必须这样做

    $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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 2014-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多