我正在构建购物车网站并使用SQL表
CATEGORY
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
如您所见,我最后一个子类别只有一列
现在我需要做的是在主页上按主要类别搜索,例如,如果用户点击电子设备,则显示两台电视,因为他们在电子设备上有父母 - 家长 - 父母ID,请记住,产品表确实有类别只有一列。
我应该更新产品表并为类别子项包含6列以解决此问题吗?或者我如何为此构建有效的SQL存储过程?
谢谢
杰里
答案 0 :(得分:1)
,您将使用CONNECT BY
答案 1 :(得分:0)
如果您正在使用SQL 2008,那么您可能希望查看HIERARCHYID数据类型。否则,您可能需要考虑重新设计Category表。你现在如何建模,你必须使用递归从儿童笔记到父母或从父母到孩子。
您可以使用嵌套集模型来实现层次结构,而不是使用链接列表模型(这是您拥有的)。搜索Joe Celko和嵌套集模型,你应该能够找到它的一些很好的描述。他还写了an entire book on modeling trees and hierarchies in SQL。嵌套集模型需要一些设置来维护数据,但在选择数据时更容易使用。由于您的类别可能会保持相对稳定,因此它似乎是一个很好的解决方案。
编辑:要真正回答你的问题......你可以编写一个存储过程,该过程位于WHILE循环中,选择子项并收集表变量中找到的任何产品。在每个循环中检查@@ ROWCOUNT,如果它为0,那么你已经到了最后。然后你只需从你的表变量中选择。这是一种递归(和慢)方法,这就是为什么这种类型的模型在SQL中很多情况下都不能很好地工作。
在几乎任何情况下,您都不应该只在产品表中添加6个(或7个或8个)类别ID。坏。坏。坏。这将是一个维护噩梦等等(当你的类别深入7级时会发生什么......然后8 ......然后9。
答案 2 :(得分:0)
使用递归CTE来做到这一点!就像一场梦! http://msdn.microsoft.com/en-us/library/ms186243.aspx