1

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

  1. 执行 SQL 查询以获取所有顶级注释
  2. 代码循环遍历顶级注释,并为每个注释执行 SQL 查询以获取其子级

现在我想知道只有一个 SQL 查询来获取所有注释的解决方案是否会更有效,因为它们后面跟着这里建议的代码以按线程对它们进行排序。有什么推荐吗?

谢谢,卢西亚诺

4

1 回答 1

0

我已经完成了类似的脚本,从我的角度来看,最好进行第一个查询以获取所有“父母”(parent_id == 0),然后为每个人执行另一个查询以获取其所有“儿子”信息.

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

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

于 2012-11-08T11:07:34.223 回答