У меня есть таблица со следующей информацией:
id | user_id | points
--------------------------
1 | 12 | 48
2 | 15 | 36
3 | 18 | 22
4 | 12 | 28
5 | 15 | 59
6 | 12 | 31
etc.
Я хочу первую десятку (массив) с наибольшим количеством записей на user_id (в порядке убывания). Итак, используя приведенную выше таблицу, мне нужен следующий массив взамен:
Как я могу сделать это с помощью CodeIgniter, используя метод запроса активной записи? Можно ли это сделать с помощью COUNT и GROUP BY user_id?
Хотя это поздний ответ, я бы сказал, что это поможет вам ...
$query = $this->db
->select('user_id, count(user_id) AS num_of_time')
->group_by('user_id')
->order_by('num_of_time', 'desc')
->get('tablename', 10);
print_r($query->result());
Я думаю, вы должны посчитать результаты с помощью FOUND_ROWS () и SQL_CALC_FOUND_ROWS . Вам понадобятся два запроса: select
, group_by
и т. Д. Вы добавите плюс и выберите: SQL_CALC_FOUND_ROWS user_id
. После этого запроса выполните запрос: SELECT FOUND_ROWS()
. Это вернет желаемый номер.
Этот код считает строки с диапазоном дат:
Контроллер:
$this->load->model("YourModelName");
$data ['query'] = $this->YourModelName->get_report();
Модель:
public function get_report()
{
$query = $this->db->query("SELECT *
FROM reservation WHERE arvdate <= '2016-7-20' AND dptrdate >= '2016-10-25' ");
return $query;
}
где «arvdate» и «dptrdate» - это две даты в базе данных, а 'booking' - это имя таблицы.
Просмотр:
<?php
echo $query->num_rows();
?>
Этот код должен возвращать количество строк. Чтобы вернуть данные таблицы, используйте
$query->rows();
return $row->table_column_name;