【问题标题】:Recursion & MYSQL?递归和MYSQL?
【发布时间】:2011-03-13 21:54:03
【问题描述】:

我得到了一个非常简单的表结构,如下所示:

Table Page Hits

id | title  | parent | hits
---------------------------
 1 | Root   |        | 23
 2 | Child  |      1 | 20
 3 | ChildX |      1 | 30
 4 | GChild |      2 | 40

因为我不想在我的代码中使用递归,所以我想做一个递归 SQL。

是否有任何 SELECT 语句来获取 Root (23+20+30+40) 或 Child ( 20 + 40 ) 的总和?

【问题讨论】:

    标签: sql mysql recursion


    【解决方案1】:

    不在 1 个选择语句中,没有。

    如果您知道关系商店的最大深度(即 parent->child->child 或 parent->child->child->child),您可以编写一个 select 语句,它会为您提供一堆数字然后必须单独总结(每个深度级别 1 个数字)。

    但是,您可以使用递归的 mysql 存储过程来做到这一点。

    【讨论】:

    • 在我的情况下无法估计最大深度。
    【解决方案2】:

    您正在使用adjacency list model 组织分层数据。这种递归操作很困难的事实实际上是该模型的一个主要缺点。

    某些 DBMS,例如 SQL Server 2005、Postgres 8.4 和 Oracle 11g,支持使用 common table expressionsWITH 关键字的递归查询。

    至于 MySQL,您可能有兴趣查看以下文章,该文章描述了一种替代模型(nested set model),它使递归操作更容易(可能):

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 2010-09-21
      • 1970-01-01
      • 2012-08-02
      • 2023-03-12
      • 2014-01-29
      相关资源
      最近更新 更多