亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于無限級分類數據庫表結構設計問題,遍歷某分類下所有產品 效率

關于無限級分類數據庫表結構設計問題,遍歷某分類下所有產品 效率

森林海 2018-12-06 19:20:22
?關于無限級分類數據庫表結構設計問題,遍歷某分類下所有產品 效率 數據庫表結構是這樣的: [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) + '%' )

查看完整回答
反對 回復 2019-01-07
?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

可以設計一個類別路徑,這樣找路徑的時候就不用做遞歸了,不過如果一個子類別有多個父類別就可能不太好弄了

查看完整回答
反對 回復 2019-01-07
?
茅侃侃

TA貢獻1842條經驗 獲得超22個贊

@foxidea:?

In 可以改成Join 你可以把兩個查詢改稱一個

查看完整回答
反對 回復 2019-01-07
  • 3 回答
  • 0 關注
  • 536 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號