codeigniter on 和 where 组合

Posted

技术标签:

【中文标题】codeigniter on 和 where 组合【英文标题】:codeigniter on and where combination 【发布时间】:2017-11-18 17:19:50 【问题描述】:

user左连接表personal_record然后连接表activity


usertable: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 组合的主要内容,如果未能解决你的问题,请参考以下文章

多个类似子句 Codeigniter

MySQL 中 on与where筛选条件的区别

CodeIgniter:如何使用 WHERE 子句和 OR 子句

Codeigniter:MySQL Where 子句和引号

SELECT WHERE ON 高级方式

从表中选择或在 codeigniter 中的 where 和运算符中选择