thinkphp同表join

本文介绍了一种基于关联表结构实现无限级评论的功能,并详细解释了如何通过一次查询获取多级评论及其对应的用户信息。

写了一个评论功能,需要实现无限下级回复

具体样子是这样的:


表结构是这样的(这里只摆几个需要的字段出来):


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!记录一下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值