线程视图中的分层评论系统:PHP和MySQL

线程视图中的分层评论系统:PHP和MySQL,php,mysql,hierarchy,comments,Php,Mysql,Hierarchy,Comments,我需要呈现一个2级分层评论系统的线程视图。注释存储在数据库中。有关层次结构的信息由字段“parent_id”(顶层注释为0)提供。我无法更改数据库的结构。 目前的解决方案是通过多个SQL查询: 执行SQL查询以获取所有顶级注释 代码循环遍历顶级注释,并对每个注释执行SQL查询以获取其子注释 现在我想知道,如果一个解决方案只有一个SQL查询来获取所有注释,因为它们后面跟着建议按线程排序的代码,那么它是否会更有效。 有什么建议吗 谢谢, Luciano我也做过类似的脚本,从我的角度来看,最好先进行一

我需要呈现一个2级分层评论系统的线程视图。注释存储在数据库中。有关层次结构的信息由字段“parent_id”(顶层注释为0)提供。我无法更改数据库的结构。 目前的解决方案是通过多个SQL查询:

  • 执行SQL查询以获取所有顶级注释
  • 代码循环遍历顶级注释,并对每个注释执行SQL查询以获取其子注释
  • 现在我想知道,如果一个解决方案只有一个SQL查询来获取所有注释,因为它们后面跟着建议按线程排序的代码,那么它是否会更有效。 有什么建议吗

    谢谢,
    Luciano

    我也做过类似的脚本,从我的角度来看,最好先进行一次查询以获取所有的“父”(parent_id==0),然后对每个“父”(parent_id==0)进行另一次查询以获取其所有的“子”信息

    如果您必须使用单个查询检索大量威胁,则必须等待查询完成才能使用数据。如果您将搜索划分为不同的和较小的查询,您可以在查找“子”之前开始格式化和打印它们。在单个查询中执行此操作可能会使查询速度变慢,因为在同一查询中使用更多表可能会使查询在有人创建新威胁时由于锁定表而停止

    另一种解决方案是在一个查询中检索所有威胁,我只建议在查询速度非常慢的情况下使用多个连接,或者在未索引字段中使用WHERE(您永远不应该这样做,但如果您无法更改数据库…)(父母和儿子,没有任何WHERE或JOIN会使查询速度变慢)然后使用PHP组织他们。这绝对不实用,除非完成查询的时间很长,否则永远不要使用这种方法。

    可能重复的