【发布时间】:2011-12-06 08:58:42
【问题描述】:
我想做一个摘要脚本,比如今天、昨天、本周、上周、本月、上个月有多少新用户。
我正在使用 CodeIgniter,所以我想知道哪个更好?在这样的模型上使用多个调用:
$this->model->get_today_users();
$this->model->get_yesterday_users();
$this->model->get_this_week_users();
// so on
上述每个函数仅返回具有特定日期范围的用户数(例如 SELECT COUNT(*) WHERE join_date=NOW() for today_users 等 - 当然使用 CI 活动记录)。
或者最好使用一个包含所有必要子查询的单个查询,如下所示:
function stats(){
$this->db->select('*');
$this->db->select('(SELECT COUNT(*) FROM users WHERE join_date=NOW()) as today');
$this->db->select('(SELECT COUNT(*) FROM users WHERE join_date=NOW()-INTERVAL 1 DAY) as yesterday');
$this->db->select('(SELECT COUNT(*) FROM users WHERE WEEK(join_date)=WEEK(NOW()) ) as this_week');
$this->db->select('(SELECT COUNT(*) FROM users WHERE WEEK(join_date)=WEEK(NOW())-1 ) as last_week');
$this->db->select('(SELECT COUNT(*) FROM users WHERE MONTH(join_date)=MONTH(NOW()) ) as this_month');
$this->db->select('(SELECT COUNT(*) FROM users WHERE MONTH(join_date)=MONTH(NOW())-1 ) as last_month');
$this->db->from('users');
$ret = $this->db->get();
}
然后调用例如 $data['stat'] = $this->model->stats();所以在视图中,我可以调用 $stat->today、$stat->this_week 等。
提前感谢您的回答。
更新:如果我想创建一个接收日期的函数怎么办?假设我必须像这样循环一个月:
//for the sake of simplicity
foreach(day in a month as $r){
$this->model->get_user_on_this_day($r);
}
这意味着一个月 30 天,它将循环 30 次!还有比这更好的方法吗?
【问题讨论】:
标签: mysql codeigniter