我在MySQL中对我的表使用了邻接表模型,并使用PHP函数递归进行查询,并意识到它会减慢网站的速度。有没有一种替代模型,我可以使用一个查询来同时获得父元素和子元素,而不需要递归?
表结构如下:
myTable:
+----+----------+
| id | parentID |
+----+----------+
| 1 | null |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 4 |
-----------------我使用如下所示的递归查询:
function queryf($id) {
$query = mysql_query("SELECT * FROM `Table` WHERE id='$id'",$this->connect);
while($row = mysql_fetch_assoc($query)) {
$sid = $row['id'];
//code
$this->$queryf($sid);
}
}发布于 2011-08-23 23:52:04
您可以使用嵌套集方法。
在http://en.wikipedia.org/wiki/Nested_set_model和Move node in nested set中查看更多信息
发布于 2011-09-09 19:58:21
您的表中存储了多少条记录?嵌套集合绝对更快,但表结构非常精细。如果它坏了,修复表结构是非常有挑战性的,而且通常需要手动干预。
如果您只有几百条记录,那么使用邻接方法可能更好。如果你在谈论数千或记录,使用嵌套集合肯定会更好,但确保处理它的代码是100%防弹的,否则你的表将像Humpty Dumpty一样。
虽然邻接列表的效率很低,但有一些方法可以有效地使用它们。我写了一个类来方便地处理邻接表。你可以从这里下载:
http://www.pdvictor.com/en/?sv=&category=just%20code&title=adjacency%20model
发布于 2011-08-23 23:47:23
如果您多次递归查询DB (显然就是这种情况),就会出现性能问题。
您可以做的是一次查询所有数据,然后让PHP递归地处理/组织这些项。你应该不会介意的。
https://stackoverflow.com/questions/7163737
复制相似问题