phpcodeignitergroup-bycountquery-builder

How to COUNT() aggregate rows when using GROUP BY with CodeIgniter's query builder


I have a table with the following info:

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

etc.

What I want is a top 10 (array) with most entries per user_id (order high to low). So using the table above I need the following array in return:

How can I do this with CodeIgniter using query builder methods? Can this be done with COUNT and GROUP BY user_id?


Solution

  • I believe you'll want something like this:

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

    This will produce a result like

    |  USER_ID |  TOTAL  |
    |    12    |    3    |
    |    15    |    2    |
    |    18    |    1    |
    

    UPDATE: As some pointed out in the comments the original query was summing the user_ids rather than counting them. I've updated the active record query to correct this.