我在MySql中有一个categories
表,如下所示:
categoryId | categoryTitle | definedField | parentId
1 Title 123 NULL
2 AnotherTitle 234 1
3 AndAnotherOne NULL 1
我需要做的是通过上升到父级来找到最接近的definedField值,如下所示;
由于类别2具有definedField,因此返回其值; 由于类别3没有已定义的字段,因此请向上搜索其父级。它已定义字段,因此返回它。如果它没有,请搜索直到找到一个。
将 ALLWAYS 作为将定义已设置的最高类别。我只需要在MySQL InnoDb表中找到一个好的算法来搜索它。
答案 0 :(得分:2)
在MySQL中没有直接的方法来检索分层数据(例如,Postgres的RECURSIVE查询)。有一篇很好的文章总结了在MySQL中实现嵌套数据集的不同方法:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/
大多数用户曾经处理过分层数据 一个SQL数据库无疑了解到了管理 分层数据不是关系数据库的用途。 关系数据库的表不是分层的(如XML), 但只是一个单一的清单。分层数据具有父子 在关系中不自然表示的关系 数据库表。
本文涵盖两个模型:邻接列表和嵌套集。
邻接列表模型
在邻接列表模型中,表中的每个项都包含一个指针 给它的父母。最顶层的元件,在这种情况下是电子元件,有一个 其父级的NULL值。邻接列表模型具有优势 很简单,很容易看出FLASH是一个孩子ofmp3 玩家,这是一个便携式电子产品的孩子,是一个孩子 电子产品。虽然可以公平地处理邻接列表模型 在客户端代码中,使用模型可以更多 在纯SQL中存在问题。
嵌套集模型
在嵌套集模型中,我们可以以新的方式查看我们的层次结构, 不是作为节点和行,而是作为嵌套容器。