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

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

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

PHP
拉丁的传说 2019-03-17 16:43:19
如何像简书一样实现二级评论呢?我现有字段部分如下: 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; } 获取到的评论结构如下 那么我如何能够把第三级评论拿出来放到二级评论实现简书的那种评论结构呢?
查看完整描述

3 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

$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();
}

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

https://img1.sycdn.imooc.com//5c8f46550001671006320534.jpg

查看完整回答
反对 回复 2019-03-18
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

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

查看完整回答
反对 回复 2019-03-18
?
墨色风雨

TA贡献1853条经验 获得超6个赞

增加一个顶级父节点字段

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

添加回答

举报

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