Sql codeigniter中的多个联接和分组

Sql codeigniter中的多个联接和分组,sql,codeigniter,group-by,Sql,Codeigniter,Group By,我正在使用Codeigniter,我想做的是一个按组返回用户的查询 一个组可以有一个或多个用户,以下是表的示例: groups table users table users_by_groups table id id id_group id_user 1 10 1 10

我正在使用Codeigniter,我想做的是一个按组返回用户的查询

一个组可以有一个或多个用户,以下是表的示例:

groups table        users table              users_by_groups table
    id                  id                    id_group   id_user
    1                   10                      1          10
    2                   11                      1          11
    3                   12                      1          12
                                                2          11
                                                3          12
我的问题是:

public function getUsersByGroup(){
        $this->db->select('g.vgro_name,u.vusr_user');
        $this->db->from('vts_user_by_group b');
        $this->db->join('vts_groups g', 'b.vubg_vgro_id = g.vgro_id');
        $this->db->join('vts_users u', 'b.vubg_vusr_id = u.vusr_id');
        $this->db->group_by('g.vgro_name,vusr_user');
        // $this->db->order_by('u.vusr_user','asc');
        $query = $this->db->get();
        return $query->result();
    }
这是什么回报:

      0 => 
object(stdClass)[28]
  public 'vgro_name' => string 'GROUP1' (length=4)
  public 'vusr_user' => string 'john' (length=9)
1 => 
object(stdClass)[29]
  public 'vgro_name' => string 'GROUP1' (length=4)
  public 'vusr_user' => string 'alice' (length=4)
2 => 
object(stdClass)[30]
  public 'vgro_name' => string 'GROUP2' (length=3)
  public 'vusr_user' => string 'mark' (length=3)
这不是我想要的。例如,我假装:

 0 => 
object(stdClass)[31]
  public 'vgro_name' => string 'GROUP1' (length=7)
  public 'vusr_user' => string 'john' (length=7)
  public 'vusr_user' => string 'alice' (length=7)

    2 => 
object(stdClass)[30]
  public 'vgro_name' => string 'GROUP2' (length=3)
  public 'vusr_user' => string 'mark' (length=3)

我做错了什么?

您可以用PHP进行“分组”:

public function getUsersByGroup(){
    $this->db->select('g.vgro_name,u.vusr_user');
    $this->db->from('vts_user_by_group b');
    $this->db->join('vts_groups g', 'b.vubg_vgro_id = g.vgro_id');
    $this->db->join('vts_users u', 'b.vubg_vusr_id = u.vusr_id');
    $query = $this->db->get();

    $resultsByGroup = array();

    foreach($query->result_array() as $row) {
        $resultsByGroup[$row['vgro_name']][] = $row['vusr_user'];
    }

    return $resultsByGroup;
}

您希望能够灵活地将列添加到sql查询的输出中,而实际上您只能真正添加行。但是添加另一个用户将是一行,而不是一列……sql不可能做到这一点吗?您的代码运行得非常完美,循环前只缺少一行:$query=$this->db->get()@Limon无法通过SQL将结果堆叠到组数组中,这是因为我有多个join?如果我有一个加入它将工作,我think@Limon不,不是因为你的加入。sql根本无法将结果组织到数组中—它始终是一个列表,由应用程序将该列表排序到数组组中<代码>分组依据用于聚合,而不是分组到数组中