关于无限级分类数据库表结构设计问题,遍历某分类下所有产品 效率
数据库表结构是这样的:
[Category] 类别表
Id(int) 类别IdParentId(int) 父类IdName(nvarchar(50)) 类别名称
[Product] 产品表
Id(int) 产品名称Name(nvarchar(50)) 产品名称CategoryId(int) 类别Id(对应 [Category].Id)Info(ntext) 介绍信息……
[Category] 类别表数据Id ParentId Name
1 0 服装2 1 男装3 2 衬衫4 2 长裤5 2 短裤6 2 T恤7 2 外套8 2 卫衣9 2 西装10 4 休闲裤11 4 西裤12 4 牛仔裤13 4 运动裤
[Product] 产品表数据 不再一一举例Id Name CategoryId Info1 23……
这样设计的结构,存在很严重的效率问题,假设我想找出某分类(假设为男装)下所有的产品,就需要用递归算法,找出(男装)下的所有子分类,然后对 产品表进行 条件 in 查询,得到产品列表
找出所有男装产品
首先写程序,递归出 男装分类下的子类列表(2,3,4,5,6,7,8,9,10,11,12,13)
然后用 sql 查询出来
select * from [Product] where CategoryId in(2,3,4,5,6,7,8,9,10,11,12,13)
这样做实在是太糟糕了
那么该怎么设计呢?
3 回答
哔哔one
TA贡献1854条经验 获得超8个赞
嗯。。。补充楼上--!
Id ParentId Name Path
1 0 服装 ,1,
2 1 男装 ,1,2,
3 2 衬衫 ,1,2,3,
4 2 长裤 ,1,2,4,
5 2 短裤 ,1,2,5,
.....
select * from [Product] p where p.CategoryId in(select Id from [Category] c where c.path like (select path from [Category] where Id=2) + '%' )
- 3 回答
- 0 关注
- 502 浏览
添加回答
举报
0/150
提交
取消