Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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_Database - Fatal编程技术网

Mysql 返回自关联表的所有树族

Mysql 返回自关联表的所有树族,mysql,sql,database,Mysql,Sql,Database,我有这样一个db结构: 表:类别(id、fk_类别、名称) 指向同一表的字段id_测试 前。 玩具>运动>球 当我寻找球的时候,我还需要:运动和玩具。 其中第一个父项为fk_cat=null。 因此: id=1,fk_cat=null,name='Toy' id=2,fk_cat=1,name='Sports' id=3,fk_cat=2,name='Ball' 问题是,我如何用一个sql处理我所有的家谱? 请参见测试您描述的父/子关系被称为邻接列表模型,在MySQL中很难遍历该模型(其他RDB

我有这样一个db结构:

表:类别(id、fk_类别、名称)

指向同一表的字段id_测试

前。 玩具>运动>球

当我寻找球的时候,我还需要:运动和玩具。 其中第一个父项为fk_cat=null。 因此: id=1,fk_cat=null,name='Toy' id=2,fk_cat=1,name='Sports' id=3,fk_cat=2,name='Ball'

问题是,我如何用一个sql处理我所有的家谱?
请参见测试

您描述的父/子关系被称为
邻接列表模型
,在MySQL中很难遍历该模型(其他RDBMS可以使用
递归公共表表达式处理此问题

如果您知道父/子关系的潜在数量,则可以使用
外部联接
为每个潜在关系(祖父母、父母、子女等)联接表本身。下面是一个最多包含3个级别的示例:

select 
  cc.id idchild, 
  ccparent.id idparent,
  ccgrandparent.id idgrandparent
from con_categoria cc
  left join con_categoria ccparent on cc.fk_cat = ccparent.id
  left join con_categoria ccgrandparent on ccparent.fk_cat = ccgrandparent.id
where cc.fk_cat = 378
如果您不知道潜在子级的最大数量,则需要研究在函数或过程中使用
动态Sql
。搜索SO,您应该会看到一些示例

作为建议,如果是选项,考虑使用<代码>嵌套集合模型< /代码>。更容易查询分层数据。下面是一篇关于这个主题的好文章,以及与

邻接列表模型的比较:


您描述的父/子关系被称为
邻接列表模型
,在MySQL中很难遍历该模型(其他RDBMS可以使用
递归公共表表达式处理此问题

如果您知道父/子关系的潜在数量,则可以使用
外部联接
为每个潜在关系(祖父母、父母、子女等)联接表本身。下面是一个最多包含3个级别的示例:

select 
  cc.id idchild, 
  ccparent.id idparent,
  ccgrandparent.id idgrandparent
from con_categoria cc
  left join con_categoria ccparent on cc.fk_cat = ccparent.id
  left join con_categoria ccgrandparent on ccparent.fk_cat = ccgrandparent.id
where cc.fk_cat = 378
如果您不知道潜在子级的最大数量,则需要研究在函数或过程中使用
动态Sql
。搜索SO,您应该会看到一些示例

作为建议,如果是选项,考虑使用<代码>嵌套集合模型< /代码>。更容易查询分层数据。下面是一篇关于这个主题的好文章,以及与

邻接列表模型的比较:


嵌套的子/父关系是否有最大数量?嵌套的子/父关系是否有最大数量?