2014-01-14 164 views
0

說我有一個wiki頁的表。這些屬於wiki_id顯示的某個wiki。有不同的維基。因此,表看起來像這樣:MySQL遞歸查詢

ID: WIKI_ID: TITLE: PARENT_ID: 
1 3   Page1  Null 
2 3   Page2  1 
3 3   Page3  1 
4 3   Page4  3 
5 3   Page5  4 
6 4   Page1  Null 
7 4   Page2  6 

現在我的主要目標是第三頁和所有子頁面複製到另一個維基。在我使用MySQL數據庫時,我遇到了問題,我無法使用with-clause來選擇它們。

我找到了一種通過在標題字段中設置標籤來選擇所有需要的頁面的方法。但我不能按照他們的方式插入它們,因爲我需要調整parent_id。所以我的桌子應該看起來像。

ID: WIKI_ID: TITLE: PARENT_ID: 
1 3   Page1  Null 
2 3   Page2  1 
3 3   Page3  1 
4 3   Page4  3 
5 3   Page5  4 
6 4   Page1  Null 
7 4   Page2  6 
8 4   Page3  6 
9 4   Page4  8 
10 4   Page5  9 

所以我想過是這樣的:

  • 我第一次與wiki_id維基只選擇第3頁:3

  • 然後我選擇起始頁(第1頁)新項目的權利,以獲得正確的parent_id。通過在parent_id等於null的頁面中搜索某個項目的頁面,頁面3將始終爲每個wiki的首頁的子頁面

  • 之後,我將從表中選擇所有parent_id等於從維基與wiki_id的第3頁的ID:3,選擇從與wiki_id維基新的第3頁:4再次得到正確的PARENT_ID並將其插入到表

我會在重複的最後一步,如果我知道深度,這完全是我的問題。深度可能會不時變化。 希望你知道任何解決方案,以找到樹中元素的最大深度。我也開放其他解決方案來解決這個問題。

回答

0

解決它的另一種方式。我只是用原始的parent_id插入新頁面。之後,我通過標題欄加入他們,以獲得同一行中的原始ID和新ID。並通過將parent_id設置爲頁面的新ID來更新每行以更新新頁面的頁面