亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將平臺解析成樹的最有效/優雅的方法是什么?

將平臺解析成樹的最有效/優雅的方法是什么?

慕森王 2019-05-27 11:05:02
將平臺解析成樹的最有效/優雅的方法是什么?假設您有一個存儲有序樹層次結構的平面表:Id   Name         ParentId   Order 1   'Node 1'            0      10 2   'Node 1.1'          1      10 3   'Node 2'            0      20 4   'Node 1.1.1'        2      10 5   'Node 2.1'          3      10 6   'Node 1.2'          1      20這是我們所擁有的圖表[id] Name。根節點0是虛構的。                       [0] ROOT                          / \               [1]節點1 [3]節點2              / \ \    [2]節點1.1 [6]節點1.2 [5]節點2.1          /           [4]節點1.1.1您將使用什么簡約方法將其輸出為HTML(或文本,就此而言)作為正確排序,正確縮進的樹?進一步假設你只有基本的數據結構(數組和散列圖),沒有帶有父/子引用的花哨對象,沒有ORM,沒有框架,只有你的雙手。該表表示為結果集,可以隨機訪問。偽代碼或普通英語是可以的,這純粹是一個概念性的問題。額外問題:在RDBMS中存儲這樣的樹結構是否有根本更好的方法?
查看完整描述

3 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

從Oracle 9i開始,您可以使用CONNECT BY。


SELECT LPAD(' ', (LEVEL - 1) * 4) || "Name" AS "Name"

FROM (SELECT * FROM TMP_NODE ORDER BY "Order")

CONNECT BY PRIOR "Id" = "ParentId"

START WITH "Id" IN (SELECT "Id" FROM TMP_NODE WHERE "ParentId" = 0)

從SQL Server 2005開始,您可以使用遞歸公用表表達式(CTE)。


WITH [NodeList] (

  [Id]

  , [ParentId]

  , [Level]

  , [Order]

) AS (

  SELECT [Node].[Id]

    , [Node].[ParentId]

    , 0 AS [Level]

    , CONVERT([varchar](MAX), [Node].[Order]) AS [Order]

  FROM [Node]

  WHERE [Node].[ParentId] = 0

  UNION ALL

  SELECT [Node].[Id]

    , [Node].[ParentId]

    , [NodeList].[Level] + 1 AS [Level]

    , [NodeList].[Order] + '|'

      + CONVERT([varchar](MAX), [Node].[Order]) AS [Order]

  FROM [Node]

    INNER JOIN [NodeList] ON [NodeList].[Id] = [Node].[ParentId]

) SELECT REPLICATE(' ', [NodeList].[Level] * 4) + [Node].[Name] AS [Name]

FROM [Node]

  INNER JOIN [NodeList] ON [NodeList].[Id] = [Node].[Id]

ORDER BY [NodeList].[Order]

兩者都將輸出以下結果。


名稱

'節點1'

'節點1.1'

'節點1.1.1'

'節點1.2'

'節點2'

'節點2.1'


查看完整回答
反對 回復 2019-05-27
  • 3 回答
  • 0 關注
  • 542 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號