包含多层嵌套的评论系统,有没有更好的办法?

2015-05-09 15:06:48 +08:00
 geeglo

在写一个论坛,在文章回复中,我想要的是多层嵌套,就是俗称的盖楼回复。

目前能想到解决方法如下

一次从回复表中取出所有该文章的回复。
然后通过递归输出一个多维数组。

然后在页面中也是递归输出html

我想问问更好的方法是什么。因为一次取所有回复,然后递归,当数据量大了可能并不是很好,尤其是还要分页。

回复表中的主要字段是: 评论唯一ID,评论所属文章,评论的父ID

想过根据页码从数据库中只取当前页下的评论,这时候遇到的问题如下:

设每页10条回复。
若第一条回复有9条子评论,sql语句是 SELECT * FROM comments WHERE article_id = 1 LIMIT 0,10
这样之后 评论第一页只有一条回复父回复。

我的表达不知道你能不能理解。

2881 次点击
所在节点    问与答
5 条回复
lxrmido
2015-05-09 15:14:32 +08:00
嵌套评论,我见过表现最好的是acfun的:
www.acfun.com
然后,不需要考虑在后台代码里递归,这种事情就交给前端吧。
geeglo
2015-05-09 15:22:13 +08:00
@lxrmido 简单看了一下,A站是根据页码只输出当前页的数据。然后渲染页面是用js做的。
这样服务器上少一次递归。

这样做的话,我不知道如何才能 准确取出数量正确的 根评论,和他的子评论,用最少的sql语句。
yangmls
2015-05-09 15:33:09 +08:00
拆分成两条语句,第一条取父评论,第二条用in取子评论

我开发一般会图省事,用ORM的 relation,实际生成11 条语句,等遇到性能问题的时候改成贪婪模式,变成两条,然后如果性能还有问题,ORM 加一层缓存,基本就解决了
c742435
2015-05-09 16:08:10 +08:00
@lxrmido 为啥我打不开这个页面
mawing
2015-05-09 16:10:33 +08:00
@c742435 www.acfun.tv

话说评论才是本体系列真是

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/189733

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX