在 codeigniter 中进行多个连接和分组
multiple joins and group by in codeigniter
我正在使用 Codeigniter,我想做的是按组查询 returns 用户。
一个群组可以有一个或多个用户,这里举例表格:
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 中执行 'grouping':
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;
}
我正在使用 Codeigniter,我想做的是按组查询 returns 用户。
一个群组可以有一个或多个用户,这里举例表格:
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 中执行 'grouping':
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;
}