V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
geeglo
V2EX  ›  问与答

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

  •  
  •   geeglo · 2015-05-09 15:06:48 +08:00 · 2881 次点击
    这是一个创建于 3510 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    目前能想到解决方法如下

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

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

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

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

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

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

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

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

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

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

    话说评论才是本体系列真是
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3812 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:31 · PVG 18:31 · LAX 02:31 · JFK 05:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.