我有一张这样的表:
Attribute | Type | Modifier
------------+---------+----------
id | integer | not null
title | text | not null
parent | integer |
parent
字段是引用同一个表的外键。
如何确保没有插入循环(循环父/子引用)?例如:
id | title | parent
------------+---------+----------
1 | A | 3 or 2
2 | B | 1
3 | C | 2
我正在使用PHP和MySQL。
答案 0 :(得分:0)
首先,假设表最初没有循环。如果是,那么你需要手动修复任何循环。然后,当您尝试为子项设置父项时,首先获取子项的潜在父项。然后继续获取父母的父母。如果您到达的节点没有父节点,那么一切正常,您可以设置子节点的父节点。如果你到达孩子,那么你知道如果你设置了那个父母就会创建一个循环。
function canSetParent($child, $parent)
{
$node = $parent;
while($node != null)
{
if($node->id == $child->id) return false; //Looped back around to the child
$node = $node->parent;
}
return true; //No loops found
}