假设有2张表
CREATE TABLE IF NOT EXISTS `structure` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(64) DEFAULT '' COMMENT '名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT = '部门表';
CREATE TABLE IF NOT EXISTS `structure` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`realname` varchar(64) DEFAULT '' COMMENT '姓名',
`structure_id` int(11) DEFAULT NULL COMMENT '所属部门',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT = '用户表';
部门表跟人员表是一个一对多的关系,请问编写接口如何生成这种结构?
{
data: [{
'id': '', // 部门ID
'name': '', // 部门名称
'list': [{ // 用户列表
'id': '', // 用户ID
'realname' : '', // 用户姓名
}],
}]
}
现在我有一个写法,但是总觉得不是太好(用的是tp5语法), 即是把数据都查出来再处理入数组中。
function test()
{
$structure = Db::name('structure')->select();
$user = Db::name('user')->select();
foreach ($structure as &value) {
foreach ($user as $k => $v) {
if ($value['id'] == $v['structure_id']) {
$value['list'][] = $v;
unset($user[$k]);
}
}
}
return $structure;
}
1 回答
SMILET
TA贡献1796条经验 获得超4个赞
你这个思路不对啊,应该是关联查询才对。
sql:
select * from 部门表 left join 用户表 on 部门表的id = 用户表的部门id
这样得到的结果集就是以部门为主用户为辅的数据集,最后对它做一次遍历组合成你那种格式的数据就ok了。
- 1 回答
- 0 关注
- 400 浏览
添加回答
举报
0/150
提交
取消