codeigniter on 和 where 组合
Posted
技术标签:
【中文标题】codeigniter on 和 where 组合【英文标题】:codeigniter on and where combination 【发布时间】:2017-11-18 17:19:50 【问题描述】:表user
左连接表personal_record
然后连接表activity
。
user
table:id ...
personal_record
表:user.id、activity.id、confirm_time...
activity
: id、时间、delete_time...
注意:时间是指在此活动上花费的时间,例如 8 小时。
在user
加入personal_record
之前,persanoal_record
部分行需要过滤为personal_record
只有在设置confirm_time时有效。personal_reocrd
只包含activity_id,activity
包含activity需要的时间加入总和(时间)一个人花费。
通过更新activity.delete_time
列删除活动。
这是我的代码。
更新(几乎解决):($data_begin过滤记录范围)
$result = $this->db->select('user.*, ifnull(sum(ac.time), 0) as time')
->from('user')
->join('(select * from personal_record where personal_record.confirm_time is not null) as pr','user.id = pr.person', 'left')
->join('(select * from activity where activity.delete_time is null and activity.create_time >"'.$date_begin.'")as ac','ac.id = pr.activity', 'left')
->group_by('user.id')
->order_by('time', 'desc')
->get()
->result();
【问题讨论】:
删除 where 条件并将其添加到这样的条件中 ->join('activity','activity.id = personal_record.activity and activity.delete_time=NULL ', 'left', false) @泰克 你应该看看这个问题,也许它有帮助。 example 【参考方案1】:$this->db->select('user.*,personal_record.*,ifnull(sum(activity.time), 0) as time');
$this->db->from('user');
$this->db->join('personal_record','personal_record.person = user.id');
$this->db->join('activity','activity.id = personal_record.activity');
$this->db->where('activity.delete_time',null);
$this->db->or_where('personal_record.confirm_time !=', null);
$this->db->order_by('time', 'asc');
$this->db->group_by('user.id');
$data = $this->db->get()->result();
return $data;
【讨论】:
使用where
会过滤掉一些没有参加任何活动的用户。以上是关于codeigniter on 和 where 组合的主要内容,如果未能解决你的问题,请参考以下文章