有个分类表T_category如下:
id,pid,name
1,0,分类一
2,0,分类二
3,1,分类三
4,1,分类四
当pid=0时就是顶级分类。
然后有个文章T_article表,
id,cid,title,content
1,3,标题,内容
2,3,标题,内容
1,1,标题,内容
T_article表中的cid对应T_category表中的id
然后有个分类列表页面,比如/list/1(这里的1就是category的id)
在访问时怎么获取T_article中cid为1的文章并且还获取他所有的子分类的文章?
这样的SQL语句怎么写效率高一点,我现在用的是in,效率不太好。
select * from
(select *,Row_Number() over(order by id desc) as rowNumber
from T_article where cid in (select id from T_category where pid=1 or id=1)
)t
首先,这个数据表的设计只是最基本的,如果要想更好用,还需要扩展几个字段。
1、你这样的SQL可以达到的目标也就是只有两级分类的时候是对的,如果是N级分类,就没有办法这样写了。
2、如果只是两级分类,你就想太多了,直接一句话就可以搞定了。
Select * from T_Article A
inner join T_category B
on A.CID=B.ID
where B.PID=1 OR B.ID=1
3、如果是要N级分类可用的,这个说来话长,不过一个可用的方法是使用Like 'Code%'这样的方法。
一般也不使用In这种写法。
用in也没什么,除非数据量特别大,这个分类不会很大