我有下表:
Id ParentId Weight
1 1 0
2 1 10
3 2 5
ParentId
引用同一个表的Id
。如何查询此表以便我自己加入它,累加第三列的累积权重?
例如,如果我想知道Id 2的累积权重,结果将返回15(Id2 + Id3 = 15),因为项目3的父项是2.如果我想知道项目3的累积权重,它将返回5,因为没有记录具有项目3的父ID。
基本上,如果我查询的记录有一个孩子,我想添加数据的子序列并返回一个结果。
这是否可以一举到达数据库,还是我必须遍历整个记录集才能找到匹配项?
答案 0 :(得分:1)
看看this article。如果您的表没有经常更新,您可以稍微修改它为GenericTree
生成所有行的所有路径的ParentId
过程(并在每次将记录插入表或更新CREATE TABLE `tree_for_my_table` (
`rootID` INT(11) NOT NULL, // root node id
`parentID` INT(11) NOT NULL, // current parent id
`childID` INT(11) NOT NULL, // child id (direct child of the parent)
`level` INT(11) NOT NULL, // how far child is from root
PRIMARY KEY (`rootID`, `parentID`, `childID`),
UNIQUE INDEX `childID` (`childID`, `level`)
)
列时调用它),将此数据存储到新表中,然后您可以使用简单查询执行所需的所有任务。就个人而言,我最终得到以下表格结构:
my_table
即使对于非常大的{{1}},为该表填充数据也不会花费太长时间。
答案 1 :(得分:0)
最后我看,mysql没有内置的分层查询方式,但是你总是可以使用Managing Hierarchical Data in MySQL中讨论的(在其他技术中)邻接列表等技术进行编码另一个表中的层次结构,允许您联接以检索层次结构中的子树。
答案 2 :(得分:0)
您需要索引树。有关实现此目的的一些方法,请参阅Managing Hierarchical Data in MySQL。