Sql codeigniter中的多个联接和分组
我正在使用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
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根本无法将结果组织到数组中—它始终是一个列表,由应用程序将该列表排序到数组组中<代码>分组依据用于聚合,而不是分组到数组中