2010-07-09 60 views
1

我有一個非常簡單的表結構是這樣的:遞歸&MYSQL?

Table Page Hits 

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

因爲我不想在我的代碼中的遞歸我願做一個recurisive SQL。

是否有任何SELECT語句可以獲得Root(23 + 20 + 30 + 40)或Child(20 + 40)的總和?

回答

2

您正在使用adjacency list model組織您的分層數據。這種遞歸操作很困難的事實實際上是這種模型的一個主要缺點。

某些DBMS(如SQL Server 2005,Postgres 8.4和Oracle 11g)支持使用common table expressionsWITH關鍵字的遞歸查詢。

至於MySQL,你可能有興趣在檢查出下面的文章描述了另一種模式(在nested set model),這使得遞歸操作容易(可能):

0

不在1選擇說明,沒有。

如果你知道關係商店的最大深度(即父 - >子 - >子或父 - >子 - >子 - >子),你可以編寫一個選擇語句,它會給你一堆數字,你然後將不得不分別總結(每深度1個數字)。

但是,您可以使用遞歸的mysql存儲過程來執行此操作。

+0

一在我的情況下無法估計最大深度。 – jantimon 2010-07-09 14:26:34