Я хочу сделать сводный скрипт, например, сколько новых пользователей там сегодня, вчера, на этой неделе, на прошлой неделе, в этом месяце, в прошлом месяце и т. Д.
Я использую 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 () для 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 раз! Есть ли лучший способ, чем это?