Mysql 返回自关联表的所有树族
我有这样一个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 返回自关联表的所有树族,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
请参见测试您描述的父/子关系被称为
邻接列表模型
,在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,您应该会看到一些示例
作为建议,如果是选项,考虑使用<代码>嵌套集合模型< /代码>。更容易查询分层数据。下面是一篇关于这个主题的好文章,以及与
邻接列表模型的比较:
嵌套的子/父关系是否有最大数量?嵌套的子/父关系是否有最大数量?