如何更好处理 查询的是父级的内容,但是又要获取多个或者全部的子级内容
先上表结构:
然后说一下业务的需求:
分页获取评论,每次获取父级评论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去做处理
这是我目前的解决思路,我想请教一下您们,有什么更好的解决方式吗
目前我更倾向于第一种的解决思路,因为都是用主键去查,会很快
通过前端异步获取或许是一个方案,先拿父级评论,再拿每个父级评论的子评论。这样分页也好做。
@青风百里 你的意思是跟百度贴吧一样吗 ,只显示父级评论下面一共有多少子评论,等你点击 “查看更多” 直接异步获取父级下面的所有子评论吗
@ericdemon 对,也可以不点击,让 js 去自动获取。
获取所有子评论相对来说简单一点
这样就可以了
@生活无限好 一开始我和你一样是用这种方式去处理,但是如果碰到评论表的数据过多的时候,比如我一个父级表下面有几十条,上百条子评论的时候这种就会很麻烦吧,就像微博热评里的第一条,他里面的子评论甚至是几万条,所以我感觉这种方式对于子评论数量比较少的时候会用的到