分類表有id,classname,parid,parpath四個字段,其中parpath記錄頂級分類到自己的路徑,例如:0,1,2,3,信息表有categoryid字段,用來跟分類表相關(guān)聯(lián),先在要查找某個分類(不確定哪個)包括子類的數(shù)據(jù),然后按id倒序排序,取10條即可。 請問大蝦們語句應(yīng)該如何寫,可以建立索引,速度越快越好哇?。?
2 回答

牛魔王的故事
TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個贊
你好,你這個很有代表性,對于一個表中有父子節(jié)點(diǎn)這種情況很常見,我在這兒給出我的權(quán)限配置中的模塊管理中的一段sql函數(shù),可自動得到這種情況,供你參考。兄弟,可是我的商業(yè)代碼喲,給你分享出來了,你這50分的園丁是不是應(yīng)該給我呢?
/****** Object: UserDefinedFunction [dbo].[FN_GetSubModule] Script Date: 07/30/2012 15:56:42 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO--查詢所有子模塊的表值函數(shù)CREATE FUNCTION [dbo].[FN_GetSubModule] (@id AS INT )RETURNS @temp TABLE ( [id] INT , [parentid] INT , [Code] NVARCHAR(50) , [FullName] NVARCHAR(200) , [Category] NVARCHAR(50), [ImageIndex] NVARCHAR(50), [Target] NVARCHAR(100), [IsPublic] INT, [SortCode] INT, [levels] INT --levels表示欄目層次的,是必須有的! )AS BEGIN DECLARE @level AS INT --聲明一個變量,用于保存欄目信息層次索引 SELECT @level = 0 INSERT INTO @temp SELECT Id, ParentId , Code , fullName , Category, ImageIndex, Target, IsPublic, SortCode, @level FROM dbo.PiModule WHERE Id = @id AND DeleteMark = 0 --先根據(jù)id獲取根據(jù)節(jié)點(diǎn)的數(shù)據(jù),@level初始為0,表示根目錄 WHILE @@rowcount > 0 BEGIN SET @level = @level + 1 INSERT INTO @temp SELECT a.id , a.ParentId , a.Code , a.FullName , a.Category, a.ImageIndex, a.Target, a.IsPublic, a.SortCode, @level FROM PiModule a INNER JOIN @temp t ON a.parentid = t.id AND t.levels = @level - 1 AND a.DeleteMark = 0 END RETURN ENDGO
- 2 回答
- 0 關(guān)注
- 807 瀏覽
添加回答
舉報
0/150
提交
取消