我有这样的数据库结构:
表:cat(id,fk_cat,name)
字段id_test指向同一个表。
实施例。 玩具>体育>球
当我搜索Ball时,我还需要:运动和玩具。 第一个父级是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处理我的所有家谱? 请参阅http://sqlfiddle.com/#!2/8bc257/2进行测试
答案 0 :(得分:3)
您所描述的父/子关系称为Adjacency List Model
,在MySQL中很难遍历(其他RDBMS可以使用Recursive Common Table Expressions
来处理)。
如果您知道父母/子女关系的潜在数量,您可以使用OUTER JOINs
为每个潜在关系(祖父母,父母,孩子等)加入自己的表格。以下是最多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
如果您不知道潜在孩子的最大数量,那么您需要在函数或过程中使用Dynamic Sql
。搜索SO,你应该看到一些例子。
作为建议,如果可以选择,请考虑使用Nested Set Model
。查询分层数据要容易得多。这是一篇关于这个主题的好文章以及与Adjacency List Model
:
http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/