有活动记录的COUNT / GROUP BY?

时间:2012-01-24 14:12:57

标签: codeigniter activerecord count group-by

我有一张包含以下信息的表格:

id  |  user_id  |  points
--------------------------
1   |  12       |  48
2   |  15       |  36
3   |  18       |  22
4   |  12       |  28
5   |  15       |  59
6   |  12       |  31

etc.

我想要的是前10个(数组),每个user_id有大多数条目(从高到低的顺序)。 所以使用上面的表格我需要以下数组:

  • 12 => 3行
  • 15 => 2行
  • 18 => 1行

如何使用活动记录查询方法对CodeIgniter执行此操作?可以使用COUNT和GROUP BY user_id来完成吗?

4 个答案:

答案 0 :(得分:9)

虽然这是一个迟到的答案,但我会说这会对你有帮助......

$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());

答案 1 :(得分:2)

我认为你应该用FOUND_ROWS() and SQL_CALC_FOUND_ROWS计算结果。您需要两个查询:selectgroup_by等。您将添加加号选择:SQL_CALC_FOUND_ROWS user_id。在此查询之后运行查询:SELECT FOUND_ROWS()。这将返回所需的数字。

答案 2 :(得分:1)

此代码对具有日期范围的行进行计数:

控制器:

$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'是数据库中的两个日期,'reservation'是表名。

查看:

<?php
 echo $query->num_rows();
?>

此代码用于返回行数。 要返回表数据,请使用

$query->rows();
return $row->table_column_name;

答案 3 :(得分:0)

$this->db->select('overal_points');
$this->db->where('point_publish', 1);
$this->db->order_by('overal_points', 'desc'); 
$query = $this->db->get('company', 4)->result();