你说的“还有一种方法就是网上看到的把类别ID做成有意义的,由多组数字组成,没3位代表一层”可以解决递归,但建议采用现在方案,可以加这样一个辅助查询列来放'01300001'这样的东西。sqlserver2005有和oracle一样的函数可以很方便的查询树。
kindID 主键编号
parentID 父编号
kindName 类别名称
orderNum 排序数要实现无限分类方法:
分类方法表(分类方法ID,分类方法名)分类表(分类ID,分类名,分类方法ID)数据分类表(kindID 主键编号,分类ID) 或:数据分类表(kindID 主键编号,分类ID,分类方法ID) kindID 主键编号
parentID 父编号
orderNum 排序数

解决方案 »

  1. 给个sqlserver2000查询树的方法:*--按父找子--*/
    declare @a table (TC_Id int,TC_PID int,TC_Name varchar(200))
    insert @a values(1,0,'中国')
    insert @a values(2,0,'美国')
    insert @a values(3,0,'加拿大')
    insert @a values(4,1,'北京')
    insert @a values(5,1,'上海')
    insert @a values(6,1,'江苏')
    insert @a values(7,6,'苏州')
    insert @a values(8,7,'常熟')
    insert @a values(9,6,'南京')
    insert @a values(10,6,'无锡')
    insert @a values(11,2,'纽约')
    insert @a values(12,2,'旧金山')declare @tmp1 table (TC_Id int,TC_PID int,TC_Name varchar(200),lev int)
    insert @tmp1 select *,1 from @a where tc_ID=1
    while @@rowcount>0
      insert @tmp1 select a.*,1 from  @a a,@tmp1 b where a.tc_pid=b.tc_ID and a.tc_ID not in (select tc_ID from @tmp1)
    select * from @tmp1
      

  2. 我的产品表中有100万条,检索出来的结果如果还是用in来搜索(而且用in搜索出来的类别ID也会很多,也许有几百个)的话,会很慢的。非%前导的like比in还慢。
    不知道有没有特别的分类算法。
    http://www.itfat.com/tech/asptech/asptech20001106/16993.html
    的方法使得对一个类别检索转换为对数字的between检索,可是整个过程实现起来很麻烦。
      

  3. to:pengdali(大力 V3.0)
    请问用like好还是in好呢?
      

aliyun

类似问题 »