Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 同一表中父/子关系的分层数据联接_Mysql_Sql - Fatal编程技术网

Mysql 同一表中父/子关系的分层数据联接

Mysql 同一表中父/子关系的分层数据联接,mysql,sql,Mysql,Sql,我有下表: Id ParentId Weight 1 1 0 2 1 10 3 2 5 ParentId引用了同一表格的Id。我如何查询这个表,以便自己连接它,将第三列的累积权重相加 例如,如果我想知道Id2的累计权重,结果将返回15(Id2+Id3=15),因为第3项的父项是2。如果我想知道项目3的累计重量,它将返回5,因为没有任何记录的父id为项目3 本质上,如果我查询的记录有一个子项,我想添加数据的子项序列并返回一个结果 这

我有下表:

Id  ParentId  Weight
1   1         0
2   1         10
3   2         5
ParentId
引用了同一表格的
Id
。我如何查询这个表,以便自己连接它,将第三列的累积权重相加

例如,如果我想知道Id2的累计权重,结果将返回15(Id2+Id3=15),因为第3项的父项是2。如果我想知道项目3的累计重量,它将返回5,因为没有任何记录的父id为项目3

本质上,如果我查询的记录有一个子项,我想添加数据的子项序列并返回一个结果


这是不是可以一次性访问数据库,还是我必须遍历整个记录集才能找到匹配项?

最后我查看了一下,mysql没有内置的分层查询方法,但您始终可以使用邻接列表等技术,在,它将层次结构编码到另一个表中,并允许您根据该表进行连接以检索层次结构中的子树。

您需要为树编制索引。请参阅以了解一些方法。

查看。如果您的表不经常更新,您可以稍微修改一下它们的
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_表
,填充该表的数据也不会花费太长时间