我有一个像下面这样的user_access表:
| 模块id|用户标识|
| --|--|
| 101 |一二三|
| 102 |一、三|
我已经用codeigniter控制器将数据从数据库中提取到datatable中。控制器如下所示:
public function getName(){
$draw = intval($this->input->get("draw"));
$start = intval($this->input->get("start"));
$length = intval($this->input->get("length"));
$fetch = $this->Erp_model->get_user_access_settings();
$data = array();
foreach($fetch->result() as $r) {
$users = explode(',',$r->user_id);
foreach($users as $user) {
$read = $this->Erp_model->read_user_info($user);
$name = $read[0]->first_name.' '.$read[0]->last_name;
}
$data[] = array(
$combhr,
$r->module_id,
$name
);
}
$output = array(
"draw" => $draw,
"recordsTotal" => $fetch->num_rows(),
"recordsFiltered" => $fetch->num_rows(),
"data" => $data
);
echo json_encode($output);
exit();
}`
在前台,我可以看到一个员工的名字,而有几个名字。前端视图如下:
| 模块ID|员工|
| --|--|
| 101 |一|
| 102 |B|
但我想做到这样:
| 模块ID|员工|
| --|--|
| 101 |A、B、C|
| 102 |素八|
我如何使用Codeigniter控制器实现此操作?
1条答案
按热度按时间vxqlmq5t1#
对于您当前的数据库设置和代码,最简单的解决方案是使用数组来存储每行的名称(
$names = [];
),然后在将它们添加到$data
数组时使用逗号内爆名称:更好的解决方案是规范化数据库,使
user_access
表看起来像这样(user_id
列中只能有一个id,因此必须为每个用户重复module_id
):| 模块id|用户标识|
| --|--|
| 101 | 1 |
| 101 | 2 |
| 101 | 3 |
| 102 | 1 |
| 102 | 3 |
然后,您可以将这个
user_access
表连接到users
表group by
module_id
,并使用group_concat
获得用逗号分隔的名称。这样你就可以在一个查询中获得所有的数据(不再需要单独的查询来获得名称),所以速度会更快。