如何更好处理 查询的是父级的内容,但是又要获取多个或者全部的子级内容

先上表结构:
如何更好处理 查询的是父级的内容,但是又要获取多个或者全部的子级内容

然后说一下业务的需求:
分页获取评论,每次获取父级评论 25 条,并且获取子评论 所有 (目前是所有,但是产品说会改为只获取 5 条)

目前是两个逻辑去处理这个需求 (可能是我知识学得不够深,目前想到比较好的就这两种,勿喷)

第一种:
1 : 通过 comments 表查出的 comment_id 和对应的内容
2 : 根据 array_column 提取出 comment_id
3 : 去 comments_families 里根据主键查询对应的 children_count (这里存储了所有该父级评论下的子评论 id)
4 : 根据需求拿取对应数量的子评论 id
5 : array_merge 合并 子评论的 comment_id
6 : 再去主表里查出子评论内容

优点: 查询的方式都是通过主键,速度是最快的
缺点:虽然可以做到对子评论的预期控制,但是如果碰到 children_list 内的内容过多 (子评论过大) ,一样获取出来会很麻烦

第二种:
1 : 通过 comments 表查出的 comment_id 和对应的内容
2 : 根据 array_column 提取出 comment_id
3 : 将 comment_id 带入到 top_comment_id 中,就直接查询出所有的子评论

优点:用了两次查询,第一次是主键,第二次是普通的索引 , 比第一种的方案减少了一次查询
并且可以不用多创建一张表
缺点:无法预期父级评论下有多少子评论,如果获取全部的子评论,可能会出现查询上的问题,如果后期产品将提取子评论的数目从全部改为 5 个或者 10 个时,需要用到 group by 去做处理

这是我目前的解决思路,我想请教一下您们,有什么更好的解决方式吗

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 6

目前我更倾向于第一种的解决思路,因为都是用主键去查,会很快

5年前 评论

通过前端异步获取或许是一个方案,先拿父级评论,再拿每个父级评论的子评论。这样分页也好做。

5年前 评论

@青风百里 你的意思是跟百度贴吧一样吗 ,只显示父级评论下面一共有多少子评论,等你点击 “查看更多” 直接异步获取父级下面的所有子评论吗

5年前 评论

@ericdemon 对,也可以不点击,让 js 去自动获取。

5年前 评论

获取所有子评论相对来说简单一点

ProjectComment::with('families')->paginate()

这样就可以了

5年前 评论

@生活无限好 一开始我和你一样是用这种方式去处理,但是如果碰到评论表的数据过多的时候,比如我一个父级表下面有几十条,上百条子评论的时候这种就会很麻烦吧,就像微博热评里的第一条,他里面的子评论甚至是几万条,所以我感觉这种方式对于子评论数量比较少的时候会用的到

5年前 评论