1

次のテーブルがあります

table_name: カテゴリ

id   name        parent  
16   Rash Vest   41  
17   Shorts      41  
20   Tops        41  
41   Shop        0  
47   Mens        16  
48   Womens      16  

table_name: アイテム

id   title                 alias                 catid  
70   Rash Vest Black       rash-vest-black       47   
96   Rash Vest Red         rash-vest-red         47  
98   Rash Vest Womens Red  rash-vest-womens-red  48  

今、ルートツリーに従ってすべてのアイテムを表示したい..

Like This
メインメニュー: SHOP
サブメニュー: Rash Vest | ショーツ | トップス
子供のカテゴリ:
メンズ
----->ラッシュ ベスト ブラック
----->ラッシュ ベスト レッド
レディース
----->ラッシュ ベスト レディース レッド

4

1 に答える 1

1

SQL-SERVER バージョン:

;WITH groups AS
(SELECT ID
 , Name
 , ParentID
 , 0 AS Level
 , CAST(Name AS VARCHAR(255)) AS Path
 FROM Category WHERE ParentID = 0

 UNION ALL

 SELECT c.ID
 , c.Name
 , c.ParentID
 , g.Level + 1
 , CAST(CAST(g.Path AS VARCHAR(255)) + 
        CAST(' -> ' AS VARCHAR(255)) + 
        CAST(c.Name AS VARCHAR(255)) AS VARCHAR(255))
 FROM Category c 
 INNER JOIN groups g ON g.ID = c.ParentID
)

SELECT g.Name
, g.Level
, g.Path
, ISNULL(itm.Title, 'No items') AS Title
FROM groups g
LEFT JOIN Item itm ON itm.CategoryID = g.ID
ORDER BY g.Path

問題のように結果を表示したい場合は、ユーザーインターフェイス(アプリケーション)のこの部分の作業よりも

例/テスト用のSQL Fiddle

于 2013-09-03T04:37:30.100 に答える