你说的“还有一种方法就是网上看到的把类别ID做成有意义的,由多组数字组成,没3位代表一层”可以解决递归,但建议采用现在方案,可以加这样一个辅助查询列来放'01300001'这样的东西。sqlserver2005有和oracle一样的函数可以很方便的查询树。
kindID 主键编号
parentID 父编号
kindName 类别名称
orderNum 排序数要实现无限分类方法:
分类方法表(分类方法ID,分类方法名)分类表(分类ID,分类名,分类方法ID)数据分类表(kindID 主键编号,分类ID) 或:数据分类表(kindID 主键编号,分类ID,分类方法ID) kindID 主键编号
parentID 父编号
orderNum 排序数
kindID 主键编号
parentID 父编号
kindName 类别名称
orderNum 排序数要实现无限分类方法:
分类方法表(分类方法ID,分类方法名)分类表(分类ID,分类名,分类方法ID)数据分类表(kindID 主键编号,分类ID) 或:数据分类表(kindID 主键编号,分类ID,分类方法ID) kindID 主键编号
parentID 父编号
orderNum 排序数
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
不知道有没有特别的分类算法。
http://www.itfat.com/tech/asptech/asptech20001106/16993.html
的方法使得对一个类别检索转换为对数字的between检索,可是整个过程实现起来很麻烦。
请问用like好还是in好呢?