多线程评论PHP?

Sea*_*ins 7 php mysql sql comments hierarchical-data

我有一个脚本,我写回来评论,但它只是单线程.我希望它是多线程的,但只有这样用户才能回复评论,而不是用户可以回复评论的评论.所以线程只有两个深度.

目前我储存comment_id反对user_id在我的数据库.

我能想到做多线程注释的唯一方法是parent在注释表中有一个字段.但是如果我这样做,那么当我用PHP选择注释时,我将不得不做另一个SELECT命令来为每个注释选择注释子项(如果有的话).好像在数据库上做了很多工作.

一定有更好的方法.有什么想法吗?还是教程?

The*_*ail 16

有三种(四种)替代可能性:

  1. 一种递归查询,用于根据父ID选择所有注释.许多数据库产品都支持此功能,语法取决于数据库类型.查看文档以获取更多信息(搜索"递归").

  2. 如果将文章ID存储在每个(子)注释中,则只需在一个常规选择查询中选择具有文章ID的所有注释即可.您可以使用父ID在右侧父评论下正确显示页面上的评论:

    SELECT * FROM comments WHERE article_id = :article_id
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果您只需要两个级别的注释,则可以使用扩展位置包括第一级和第二级注释:

    SELECT * FROM comments 
    WHERE parent_id = :article_id
    OR    parent_id IN (SELECT id FROM comments WHERE parent_id = :article_id)
    
    Run Code Online (Sandbox Code Playgroud)
  4. 也可以使用union all来组合具有相同列的两个查询,但由于我假设所有数据都来自同一个表,因此可能不需要它(请参阅上面的扩展where子句):

    SELECT * FROM comments WHERE parent_id = :article_id
    UNION ALL
    SELECT * FROM comments WHERE parent_id IN 
        (SELECT id FROM comments WHERE parent_id = :article_id)
    
    Run Code Online (Sandbox Code Playgroud)

就个人而言,我会选择2,因为它很简单(不需要异乎寻常的SQL构造),高效(1个查询)和灵活(支持任意级别的注释).