我有 2 个数据库表 'super_admin_staff' 和 'super_admin_roles'
员工表由以下人员组成:
id
name
email
phone
role
角色表的组成如下:
id
role
角色表中的 id 列是唯一的,并且与员工表的"角色"列相关联。
目前,我正在使用模型从数据库中获取所有角色:
function superAdminStaffRoles()
{
$this->db->select('*');
$this->db->from('super_admin_roles');
$query = $this->db->get();
$result = $query->result();
return $result;
}
在我的控制器中,我像这样将其传递给我的视图:
public function superAdminStaffRoles()
{
if ($this->isSuperAdmin() != true) {
$this->loadThis();
} else {
$this->load->model('super_admin_staff_model');
$data['userRecords'] = $this->super_admin_staff_model->superAdminStaffRoles();
$this->global['pageTitle'] = 'Staff Roles';
$this->global['pageDesc'] = 'Add or Edit new Staff Roles and Permissions';
$this->loadViews("super_admin/staff_roles", $this->global, $data, null);
}
}
然后在"我的视图"中显示数据,如下所示:
<tbody>
<?php
if (!empty($userRecords)) {
foreach ($userRecords as $record) {
?>
<tr>
<td><?php echo $record->role ?></td>
<td>where want to loop through the association</td>
<td class="text-center">
<a class="btn btn-sm btn-info" href="<?php echo base_url() ?>/EditRole/<?php echo $record->id; ?>"><i class="fas fa-edit"></i></a>
<a class="btn btn-sm btn-danger deleteUser" href="<?php echo base_url() ?>/DeleteRole/<?php echo $record->id; ?>"><i class="fas fa-trash"></i></a>
</td>
</tr>
<?php
}
}
?>
</tbody>
如何在模型中获取所需的其他信息,以显示与该角色关联的员工数量? 我想我可能需要联接表,但我对联接没有太多了解。
可以在同一个查询中完成吗?
结果应该是这样的:
Staff table
|id | name | role |
.......................
|1 | staff1 | 1 |
|2 | staff2 | 1 |
|3 | staff3 | 2 |
|4 | staff4 | 3 |
|5 | staff5 | 3 |
Role Table
|id | role |
...............
|1 | role 1 |
|2 | role 2 |
|3 | role 3 |
结果应如下所示:
|Staff Role | Assigned |
........................
| Role1 | 2 |
| Role2 | 1 |
| Role3 | 2 |
任何帮助表示赞赏
你去吧
首先,您需要连接两个表
内部连接
$this->db->from('super_admin_staff');
$this->db->join('super_admin_roles', 'super_admin_staff.role = super_admin_roles.id');
您将获得以下内容
|id | name | role |id | role |
......................................
|1 | staff1 | 1 |1 | role 1 |
|2 | staff2 | 1 |1 | role 1 |
|3 | staff3 | 2 |2 | role 2 |
|4 | staff4 | 3 |3 | role 3 |
|5 | staff5 | 3 |3 | role 3 |
左联接
$this->db->from('super_admin_staff');
$this->db->join('super_admin_roles', 'super_admin_staff.role = super_admin_roles.id', 'left');
您将获得以下内容
|id | name | role |id | role |
......................................
|1 | staff1 | 1 |1 | role 1 |
|2 | staff2 | 1 |1 | role 1 |
|3 | staff3 | 2 |2 | role 2 |
|4 | staff4 | 3 |3 | role 3 |
|5 | staff5 | 3 |3 | role 3 |
|6 | staff6 | 0 |null| null |
分组依据
然后分组(这与选择密切相关,因为选择子句中的内容必须在分组依据中(。 在这里,您要按角色进行分组,可以通过使用 super_admin_staff.role、super_admin_roles.id 或 super_admin_roles.role 进行分组来完成。 如果您希望在输出中使用 super_admin_roles.role,因此将其视为分组列。
使用 COUNT(*( 将返回每个组的行数。
$this->db->select('super_admin_roles.role as StaffRole, COUNT(*) as Assigned');
$this->db->from('super_admin_staff');
$this->db->join('super_admin_roles', 'super_admin_staff.role = super_admin_roles.id');
$this->db->group_by('super_admin_roles.role');
$query = $this->db->get();