如何像简书一下实现二级评论

发布于 2022-09-07 03:53:05 字数 999 浏览 19 评论 0

如何像简书一样实现二级评论呢?
我现有字段部分如下:

id 主键 pid 父id article_id 文章id

我原本的实现如下

    /**
     * @param $data array  数据
     * @param $pid  string 父级元素的名称 如 parent_id
     * @param $id     string 子级元素的名称 如 comm_id
     * @param $p_id     int    父级元素的id 实际上传递元素的主键
     * @return array
     */
    public function getSubTree($data , $pid , $id , $p_id = 0) {
        $tmp = array();
        foreach ($data as $key => $value) {
            $value['avatar'] = getAvatar($value['from_user_id']);
            if($value[$pid] == $p_id) {
                $value['child'] =  $this->getSubTree($data , $pid , $id , $value[$id]);
                $tmp[] = $value;
            }
        }
        return $tmp;
    }

获取到的评论结构如下

clipboard.png

那么我如何能够把第三级评论拿出来放到二级评论实现简书的那种评论结构呢?

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

我不吻晚风 2022-09-14 03:53:05
$comments = Db::name('comment')->where($map)->limit($offset, $per_page)->select();
foreach ($comments as $k => $v){
    $comments[$k]['avatar'] = getAvatar($v['from_user_id']);
    $map['pid'] = $v['id'];
    $comments[$k]['child'] = Db::name('comment')->where($map)->select();
}

实际上我可以通过这种方式来实现,但是我担心的是当数据量大的时候,会不会出现性能问题,希望有经验的大佬指教。
以下是我通过这种方式得到的评论数据结构

clipboard.png

坏尐絯℡ 2022-09-14 03:53:05

最好不要foreach里面跟sql,数据量大就会阻塞
把article查出来 ,再把comment查出来,拼在一起就行

怪我入戏太深 2022-09-14 03:53:05

我之前入职的一家公司做过一个APP。也是有你说的这种二级评论的情况。针对这种情况,解决的办法是分成两张表。
一张表存储一级评论。另外一张表存储二级评论。
然后每次获取的时候先去查询一级评论表,然后再次查询二级评论的表。

李白 2022-09-14 03:53:05

增加一个顶级父节点字段

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文