0

我有一个这样的数据库结构:

表:cat ( id,fk_cat ,name )

字段 id_test 指向同一张表。

前任。玩具 > 运动 > 球

当我搜索 Ball 时,我还需要: Sports 和 Toy。其中第一个父级是 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进行测试

4

1 回答 1

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/

于 2013-06-03T15:50:54.923 回答