点码器对 2 个表之间的关联记录进行计数



我有 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();

相关内容

  • 没有找到相关文章

最新更新