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

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

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;
    }

获取到的评论结构如下

https://img1.mukewang.com/5c8f46520001643306680515.jpg

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

https://img1.mukewang.com/5c8f46530001c5bb06970455.jpg

拉丁的传说
浏览 499回答 3
3回答

潇湘沐

$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(); } 实际上我可以通过这种方式来实现,但是我担心的是当数据量大的时候,会不会出现性能问题,希望有经验的大佬指教。以下是我通过这种方式得到的评论数据结构

拉风的咖菲猫

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

墨色风雨

增加一个顶级父节点字段
打开App,查看更多内容
随时随地看视频慕课网APP