【问题标题】:query for zigzag method in MYSQL在 MYSQL 中查询 zigzag 方法
【发布时间】:2014-03-25 11:08:41
【问题描述】:

我有 mysql 表。在该表中,我有两列名为id_categoryid_parent

id_category  | id_parent 
          1  |  0
          2  |  1
          3  |  1
          4  |  1
          5  |  3
          6  |  2
          7  |  2
          8  |  2
          9  |  5
         10  |  9 
         11  |  9
         12  | 11 
         13  | 11

id_category 是自动增量,id_parent 具有类别值。在这里,我想获取id_category=13 的根 id_category,它等于id_parent=1。它就像之字形 l.e id_cat =13 所以 id_parent=11, 所以现在 id_cat =11 所以 id_parent=9, id_cat =9 所以 id_parent=5, id_cat =5 所以 id_parent=3, id_cat =3 所以 id_parent=1 现在条件满足。现在我想要父 id = 1 的类别 id .. 在这个查询中预期的答案是 id_category=3。这里对于 id_category=13 id_category=3 是根类别,这正是我想要的。现在我不知道如何编写查询,请帮助我。在此先感谢

【问题讨论】:

  • 您的解决方案将非常重要。您的数据模型称为邻接列表。您想阅读一些关于潜在解决方案的文章:stackoverflow.com/questions/10999888/…mikehillyer.com/articles/managing-hierarchical-data-in-mysql
  • 非常感谢您的回复
  • 但在 mike 文章中,他没有说明如何按顺序获取列表,例如:[10]2 WAY RADIOS ->[6]PORTABLE ELECTRONICS->[1]ELECTRONICS。如果我将类别 ID 指定为 [10],那么我想要根类别([1] 电子产品)。这篇文章有点用但不完全:(请推荐一些其他文章

标签: mysql sql


【解决方案1】:

您正在以所谓的“邻接列表”形式表示一个列表。这是在 SQL 表中表示树结构的最常用方法。您正在寻找的是从根到相关节点的路径,然后是该路径中的第一个链接。 (或路径中的最后一个链接,如果您的查询以相反的顺序找到它们)。

不幸的是,以邻接表形式查找整个路径涉及递归查询,无法用简单的 SQL 编码。您有三个选择,在您的情况下可能可用也可能不可用:

  1. 使用编程语言进行搜索,以递归方式对数据库进行重复查询。每一步都会让你离树的根更近一步。到达根之前的最后一步使 id_parent 等于根 (1) 和 id_category 等于您想要的。这是您在伪代码中概述的方法。

  2. 利用 SQL 语言的扩展,允许在单个查询中遍历树。在 Oracle 中,有一个功能可以让您指示您所说的两列连接树结构中的条目。但是,此功能是 Oracle 特有的。我不知道 MYSQL 中的等效功能(如果有的话)。

  3. 设计一个替代表,以所谓的“嵌套集”形式表达树结构。嵌套集合形式太长,无法在此详细描述。你必须做一些研究并阅读它。编写查询以查找整个路径,包括从根到下一个节点的链接,在嵌套集合树中很容易。但是,您可能没有定义自己的数据的奢侈。

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多