为了账号安全,请及时绑定邮箱和手机立即绑定

寻求更好的代码写法

寻求更好的代码写法

PHP
慕莱坞森 2019-03-12 12:04:19
假设有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了。

查看完整回答
反对 回复 2019-03-18
  • 1 回答
  • 0 关注
  • 400 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信