我在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);
}
}
答案 0 :(得分:2)
您可以使用嵌套集方法。
在http://en.wikipedia.org/wiki/Nested_set_model中查看更多信息 和Move node in nested set
答案 1 :(得分:2)
您在表中存储了多少条记录?嵌套集肯定更快,但表结构非常精致。如果它破裂,修复表结构是非常具有挑战性的,它通常需要人工干预。
如果您只有几百条记录,那么使用Adjacency方法可能会更好。如果你正在谈论成千上万或记录,最好使用嵌套集,但要确保处理它的代码是100%防弹或你的表将像Humpty Dumpty。
虽然邻接列表效率低下,但有一些方法可以有效地使用它们。我写了一个类来轻松处理Adjacency列表。你可以从这里下载:
http://www.pdvictor.com/en/?sv=&category=just%20code&title=adjacency%20model
答案 2 :(得分:0)
如果您多次递归查询数据库(显然是这种情况),则会出现性能问题。
您可以做的是一次查询所有数据,然后让PHP递归地处理/组织项目。你应该没问题。