首页 > 解决方案 > 根据codeigniter中的id将多行数据分组

问题描述

我在数据库中有这样的表

  +---+-------------+--------------+
  |id | service_name| doc_id |org_id|  
  +---+-------------+--------------+
  | 1 | new service | 12     | 119  |
  |   |             |        |      |
  | 2 | new service | 24     | 119  |
  |   |             |        |      |
  | 3 | old service | 13     | 118  |
  |   |             |        |      |
  | 4 | old service | 14     | 118  |
  |   |             |        |      |
  | 5 | new service | 20     | 119  |
  +---+-------------+--------------+

我想根据 service_name 列对所有 doc_id 进行分组

我试过使用

在我的控制器中

 $where_person['org_id'] = $this->post('org_id');  
 $result_insert = $this->$model_name->fetch_doctor_services($where_person);   

在我的模型中

   function fetch_doctor_services($where){
    $this->db->select('service_name,doc_id')->from('services');

    $this->db->group_by('service_name');
    $this->db->where($where);

    return $this->db->get()->result();
}

但它不会按照我的意愿输出数据,通过 service_name 和根据该 service_name 的所有 doc_id 进行分组。我在哪里错了?目前我的输出是这样的。

       { "data":
          [ { "service_name": "new service", "doc_id": "12" }, 
            { 
            "service_name": "old service", "doc_id": "13" } 
                  ] 
                }   

标签: restcodeigniter

解决方案


你需要使用GROUP_CONCAT. 请参阅下面的代码了解如何使用它

    $this->db->select('service_name, GROUP_CONCAT( doc_id) ')->from('services');
    $this->db->group_by('service_name');
    $this->db->where($where);
    return $this->db->get()->result();

推荐阅读