写了一个评论功能,需要实现无限下级回复
具体样子是这样的:
表结构是这样的(这里只摆几个需要的字段出来):
user(用户表):userid(用户id)、nickname(用户昵称)
comments(评论表):id(评论id)、userid(评论用户id,关联userid)、touserid(被评论用户id,关联userid)、objid(被评论文章id)、pid(评论对象id 关联本表的id)
到二级回复的时候需要做成user1@user2的形式,所以在调数据的时候需要从user表查两次username,当然不想用分次这样开销大的查法。
取数据程序是这样的:
$data = Db::name('comments')
->field("tp_member.username,tp_comments.*")
->join("tp_member","tp_comments.userid=tp_member.userid")
->where(array('tp_comments.pid'=>''))
->order("create_time desc")
->paginate(10);//所有顶级回复(第一次评论,不是回复的那种 pid为空)
$page = $data->render();//tp分页
$lists = $data->all();//获取所有记录
foreach ($lists as $key => $value) {
$lists[$key]['replys'] = Db::name('comments')
->alias('c') // tp里面的取别名,不懂可以去百度tp5的官方文档
->join("tp_member m","c.userid=m.userid") //第一次join出评论用户名
->field("m.username as username")
->where(array('c.pid'=>$value['id']))
->join("tp_member tm","c.touserid=tm.userid") //第二次join出被评论用户名
->field("tm.username as tousername,c.*")
->order("create_time desc")
->paginate(3);
}
关键点在后面的两个join!记录一下。