有活动记录的COUNT/GROUP BY?

24c*_*ive 24 activerecord group-by codeigniter count

我有一个表格,其中包含以下信息:

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

etc.
Run Code Online (Sandbox Code Playgroud)

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

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

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

Bre*_*ody 78

我相信你会想要这样的东西:

 $this->db->select('user_id, COUNT(user_id) as total');
 $this->db->group_by('user_id'); 
 $this->db->order_by('total', 'desc'); 
 $this->db->get('tablename', 10);
Run Code Online (Sandbox Code Playgroud)

这将产生类似的结果

|  USER_ID |  TOTAL  |
|    12    |    3    |
|    15    |    2    |
|    18    |    1    |
Run Code Online (Sandbox Code Playgroud)

更新:正如一些人在评论中指出的那样,原始查询是对user_ids求和而不是计算它们.我已更新活动记录查询以更正此问题.

  • 此答案对user_ids求和,而不是对它们进行计数. (3认同)

小智 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());
Run Code Online (Sandbox Code Playgroud)