sql获取父类下数据,包括子类的

分类表有id,classname,parid,parpath四个字段,其中parpath记录顶级分类到自己的路径,例如:0,1,2,3,

信息表有categoryid字段,用来跟分类表相关联,先在要查找某个分类(不确定哪个)包括子类的数据,然后按id倒序排序,取10条即可。

 

请问大虾们语句应该如何写,可以建立索引,速度越快越好哇!!


SMILET
浏览 777回答 2
2回答

牛魔王的故事

你好,你这个很有代表性,对于一个表中有父子节点这种情况很常见,我在这儿给出我的权限配置中的模块管理中的一段sql函数,可自动得到这种情况,供你参考。兄弟,可是我的商业代码哟,给你分享出来了,你这50分的园丁是不是应该给我呢?/****** Object:  UserDefinedFunction [dbo].[FN_GetSubModule]    Script Date: 07/30/2012 15:56:42 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO--查询所有子模块的表值函数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     --先根据id获取根据节点的数据,@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
打开App,查看更多内容
随时随地看视频慕课网APP