选择一个字段级联

时间:2011-12-08 16:21:59

标签: mysql

我在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表中找到一个好的算法来搜索它。

1 个答案:

答案 0 :(得分:2)

在MySQL中没有直接的方法来检索分层数据(例如,Postgres的RECURSIVE查询)。有一篇很好的文章总结了在MySQL中实现嵌套数据集的不同方法:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

  

大多数用户曾经处理过分层数据   一个SQL数据库无疑了解到了管理   分层数据不是关系数据库的用途。   关系数据库的表不是分层的(如XML),   但只是一个单一的清单。分层数据具有父子   在关系中不自然表示的关系   数据库表。

本文涵盖两个模型:邻接列表和嵌套集。

邻接列表模型

  

在邻接列表模型中,表中的每个项都包含一个指针   给它的父母。最顶层的元件,在这种情况下是电子元件,有一个   其父级的NULL值。邻接列表模型具有优势   很简单,很容易看出FLASH是一个孩子ofmp3   玩家,这是一个便携式电子产品的孩子,是一个孩子   电子产品。虽然可以公平地处理邻接列表模型   在客户端代码中,使用模型可以更多   在纯SQL中存在问题。

嵌套集模型

  

在嵌套集模型中,我们可以以新的方式查看我们的层次结构,   不是作为节点和行,而是作为嵌套容器。