线程视图中的分层注释系统:PHP和MySQL

时间:2012-11-03 23:57:42

标签: php mysql hierarchy commenting

我需要渲染一个2级分层评论系统的线程视图。注释存储在数据库中。有关层次结构的信息由字段'parent_id'给出(顶级注释为0)。我无法改变数据库的结构。 本解决方案是通过多个SQL查询:

  1. 执行SQL查询以获取所有顶级注释
  2. 代码循环遍历顶级注释,并为每个注释执行SQL查询以获取其子级
  3. 现在我想知道只有一个SQL查询来获取所有注释的解决方案,因为它们后面跟着建议here的代码按线程对它们进行排序可能会更有效。 任何推荐?

    谢谢, 卢西亚诺

1 个答案:

答案 0 :(得分:0)

我已经完成了类似的脚本,从我的观点来看,最好先做一个查询以获取所有'父母'(parent_id == 0),然后为每一个查询做另一个查询以获取所有''儿子的信息。

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

另一个解决方案,我只推荐如果由于被强制使用多个JOIN或将WHERE与非索引字段一起使用而导致查询非常慢(您不应该这样做,但如果您无法更改数据库)。 ..),是在单个查询中检索所有威胁(父母和儿子,没有任何使查询变慢的WHERE或JOIN),然后使用PHP组织它们。这绝不实用,除非完成查询的时间很长,否则不应使用此方法。