【问题标题】:return empty rows if not found on another table如果在另一个表上找不到,则返回空行
【发布时间】:2016-07-20 07:52:13
【问题描述】:

我正在使用下面的代码从数据库中获取数据。

$this->db->select('users.id,users.username,users.user_status,users.monthlybasepoints,Badges_benefits.nick,Badges_benefits.statusmultiplier,users.intellipoints,payment_info.minpayout,users.earning')
        ->where('status',3)
        ->from('users')
        ->join('Badges_benefits','Badges_benefits.id=users.user_status')
        ->join('payment_info','payment_info.u_id=users.id')
         ->limit($limit,$offset)
        ->order_by($orderby,$order);
        $que= $this->db->get();
        return $que->result_array();

它正在将下面的输出返回给我。

sr   name   val metal   code    minpayout  earn
1   liz     0   zinc    120     $22        $0   
2   ahs226  70  Silver  105     $50        $2.1

->join('payment_info','payment_info.u_id=users.id')

因为我在表付款信息中只有 2 行,所以它只给我两个输出。而我希望它应该列出表用户的所有行,并且如果表支付信息中没有任何数学运算,则可以将 minpayout 的值输出为 null 像这样。

sr   name   val metal   code    minpayout  earn
1   liz     0   zinc    120     $22        $0   
2   ahs226  70  Silver  105     $50        $2.1
3    sdasd  34  any     343       null       $34
3    sdasd  34  any     343       null       $24

【问题讨论】:

标签: php sql codeigniter join


【解决方案1】:

使用左连接而不是内连接:

$this->db->select('users.id,users.username,users.user_status,users.monthlybasepoints,Badges_benefits.nick,Badges_benefits.statusmultiplier,users.intellipoints,payment_info.minpayout,users.earning')
        ->where('status',3)
        ->from('users')
        ->join('Badges_benefits','Badges_benefits.id=users.user_status', 'left')
        ->join('payment_info','payment_info.u_id=users.id', 'left')
         ->limit($limit,$offset)
        ->order_by($orderby,$order);
        $que= $this->db->get();
        return $que->result_array();

【讨论】:

  • 谢谢。你拯救了我的一天。但是,这真的太愚蠢了,我没有想到这一点。
猜你喜欢
  • 2018-04-10
  • 1970-01-01
  • 2013-02-18
  • 2011-05-03
  • 1970-01-01
  • 2021-10-09
  • 2019-11-28
  • 2020-07-06
  • 1970-01-01
相关资源
最近更新 更多