通过分类查信息的问题
发布网友
发布时间:2022-05-27 10:36
我来回答
共3个回答
热心网友
时间:2023-10-16 23:29
class表设计的时候没有想清楚.
一般情况是这样的:
ID NAME SID
1 北京 BJ
2 上海 SH
3 海淀 BJ#HD
4 朝阳 BJ#CY
5 浦东 SH#PD
6 国贸 BJ#CY#GM
明白什么意思吧.
这样的话.你通过你的TID.比如"BJ".就可以很轻松的查到BJ这个类别及其所有的子类:
select id from [class] where sid = 'BJ' or sid like 'BJ#%'
然后再通过文章表的CLASS就能很快查到你想要的数据:
select * from article where [class] in (select id from [class] where sid = 'BJ' or sid like 'BJ#%'
) order by id desc
按你现在这个设计法.一条SQL是读不出来了.只能读到当前类与当前类的直属子类.而子类的子类就得通过循环.或在程序里递归的方式来读了.
拿到一个TID.去读出该ID下所有子类:
select id from [class] where sid=@TID
然后继续读子类的子类:
select id from [class] where sid in (select id from [class] where sid=@TID)
然后......
直到select count(*) from [class] where sid in (.....)为零的时候停止.
热心网友
时间:2023-10-16 23:29
我是用递归查询查询该分类下的所有子分类。返回List<string>,List中包含该分类本身,
然后遍历List<string>中的分类ID,返回 "1,2,3“的分类字符串,
查询 信息表:Select * from article where classid in (1,2,3 ) //将上一步返回的分类字符串拼接到where条件中。
热心网友
时间:2023-10-16 23:30
oracle:
select * from article where classid in (select id from class start with id='tid' connect by prior id=sid);