Reputation: 33
I have the following tables
table_name: categories
id name parent
16 Rash Vest 41
17 Shorts 41
20 Tops 41
41 Shop 0
47 Mens 16
48 Womens 16
table_name: items
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
Now I want to display all items according to the root tree..
Like This
Main Menu: SHOP
Sub Menus: Rash Vest | Shorts | Tops
Child categories:
Mens
----->Rash Vest Black
----->Rash Vest Red
Womens
----->Rash Vest Womens Red
Upvotes: 1
Views: 1181
Reputation: 32445
SQL-SERVER versio:
;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
If you want show result as in question, than this part of work for User-interface(your application)
SQL Fiddle for example/testing
Upvotes: 1