2010-06-25 53 views
1

我建立一個購物車的網站,並使用SQL表搜索產品與父母和孩子類別

類別

Id int, 
Parent_Id, 
Description varchar(100) 

數據:

1 0 Electronics 
2 0 Furniture 
3 1 TVs 
4 3 LCD 
5 4 40 inches 
6 4 42 inches 

產品

Id int, 
Category_Id int 
Description... 

數據:

1 5 New Samsung 40in LCD TV 
2 6 Sony 42in LCD TV 

正如你可以看到我只有一個列的最後一個子類別

現在我需要做的是搜索按主要類別的網頁,例如,如果用戶點擊電子,同時顯示電視,因爲他們在電子產品中有父母母公司標識,請記住,產品表只有一列用於分類。

爲了解決這個問題,我應該更新產品表幷包含6個子類別的子列嗎?或者我如何爲此構建一個有效的SQL存儲過程?

謝謝

傑裏

+0

什麼樣的數據庫類型和版本? – 2010-06-25 14:33:33

回答

1

在Oracle中,如果你使用SQL 2008,那麼你可能想看看HIERARCHYID數據類型,你可以使用CONNECT BY

+0

謝謝你的問題,不妥協我沒有Oracle – 2010-06-25 14:48:26

0

。否則,您可能需要考慮重新設計分類表。您現在如何建模,您必須使用遞歸從兒童筆記到父母或從父母到兒童。

而不是使用鏈接列表模型(這是你所擁有的),你可以使用嵌套集合模型的層次結構。搜索Joe Celko和Nested Set Model,你應該能夠找到一些好的描述。他還寫了an entire book on modeling trees and hierarchies in SQL。嵌套集模型需要一些設置來維護數據,但在選擇數據時更容易處理。由於你的類別可能會保持相對穩定,這似乎是一個很好的解決方案。

編輯:要真正回答你的問題......你可以寫一個存儲過程,坐在一個WHILE循環中,選擇孩子並收集在表變量中找到的任何產品。在每個循環中檢查@@ ROWCOUNT,如果它是0,那麼你已經到了最後。然後,您只需從表格變量中選擇出來。這是一個遞歸(和緩慢)的方法,這就是爲什麼這種類型的模型在很多情況下在SQL中不能很好地工作。

在幾乎沒有任何情況下,您應該只在產品表中添加6個(或7個或8個)類別ID。壞。壞。壞。這將是除其他事項外維護的噩夢(當你的類別去7級深會發生什麼......然後8 ...然後9