我有一個如下表:
| ID | 鏈接蛞蝓 | 父頁面 ID | 命令 |
|---|---|---|---|
| 1 | 家 | 0 | |
| 2 | 第2頁 | 1 | |
| 3 | 第3頁 | 2 | |
| 4 | 第11頁 | 1 | 0 |
| 5 | 第12頁 | 1 | 1 |
| 6 | 第 13 頁 | 1 | 2 |
| 7 | 第21頁 | 2 | 0 |
| 8 | 第22頁 | 2 | 1 |
| 9 | 第121頁 | 5 | 0 |
| 10 | 第122頁 | 5 | 1 |
| 11 | 第123頁 | 5 | 2 |
我相信您已經可以看到該模式 - 每個都Page可以有任意數量的“子頁面”,由ParentPageId
我一直在嘗試獲取可以產生以下有序輸出的查詢(不使用LinkSlug字母順序,因為它們可以是任何東西):
| ID | 鏈接蛞蝓 | 父頁面 ID | 命令 |
|---|---|---|---|
| 1 | 家 | 0 | |
| 4 | 第11頁 | 1 | 0 |
| 5 | 第12頁 | 1 | 1 |
| 9 | 第121頁 | 5 | 0 |
| 10 | 第122頁 | 5 | 1 |
| 11 | 第123頁 | 5 | 2 |
| 6 | 第 13 頁 | 1 | 2 |
| 2 | 第2頁 | 1 | |
| 7 | 第21頁 | 2 | 0 |
| 8 | 第22頁 | 2 | 1 |
| 3 | 第3頁 | 2 |
我嘗試進行一些自聯接和分組,但最終只有一級遞回,所以這對第 3 級和可能的第 n 級子頁面沒有好處,然后我也嘗試使用 CTE,因為我知道它們對遞回查詢很有用但不知何故最終產生了我開始使用的同一張桌子,現在不知所措!
我越嘗試越糟糕 - 我知道我需要有效地選擇按 [Order] 排序的頂層(ParentPageId 為 null),然后在任何有按 [Order] 排序的子頁面的地方注入,然后重復直到沒有孩子離開 -但不知道如何在 SQL 中執行此操作。

uj5u.com熱心網友回復:
你可以試試這個:
WITH cte_org (n, id,
LinkSlug,
ParentPageId) AS (
SELECT
CAST([order] as CHAR(200)),
id,
LinkSlug,
ParentPageId
FROM
pages
WHERE ParentPageId IS NULL
UNION ALL
SELECT
o.n || '_' || e.[order],
e.id,
e.LinkSlug,
e.ParentPageId
FROM
pages e
INNER JOIN cte_org o
ON o.id = e.ParentPageId)
SELECT * FROM cte_org order by n;
注意:在 MS SQL 中,您需要使用concat而不是||; 在 MySQL -

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/478952.html
上一篇:修復在Python中連接MicrosoftSQL服務器時出現“用戶登錄失敗..”錯誤
下一篇:計算沒有間隙的島嶼的大小
