hewei's rss

何为 > 网站研究 > 正文

sql查询100个栏目的前100个文章

有这样一个问题:有100个栏目,要查出每个栏目的前100篇文章id,就是一共要查100x100=10000个id

怎么做呢?

我以前是手工的,不怕笑话,sql不太懂,我怎么做:

select  top 100 articleid from table where classid=1

查一次把结果记下来,然后再查select  top 100 articleid from table where classid=2 再把结果记下来 然后继续 查100次  把100次的结果串起来

以前栏目不多的时候我就是这样做的,现在栏目多,快到100了,手工实在不行,要想办法了。到处找资料,到处问人,嘿,还真给我搞了几套方案。

1、union all

select  top 100 articleid from table where classid=1
union all
select  top 100 articleid from table where classid=2
union all
select  top 100 articleid from table where classid=3
union all
...
select  top 100 articleid from table where classid=100

一次? 哈哈不行 太多了 查询分析报错 试了好多次都不能一次搞定  要分2次 从1-50  51-100 或者其他  反正要分隔成两次查 就不会报错。

2、利用循环

declare @i int
set @i=1
while @i<100begin
    select top 100 articleid from table
    where  classid=@i
    set @i=@i+1
end

这个可以一次查出来 但是结果显示非常不爽  全部是显示在一个框框一个框框里面 查一次就是一个结果框  没办法把结果全部copy出来

3、目前来看最好的方法

select articleid from table a
where articleid in (
select top 100 articleid from table
where classid=a.classid)

很简单就搞定了 牛人告诉我的 我看了半天不知道怎么理解  哈哈 没学过是菜鸟 大致意思就是查询一个articleid 判断它是不是在这个classid的前100个articleid里面 是就记录然后继续判断下一个articleid

4、我提出把方案2的思路改进 首先查一次top100 把得到的数据插入一个临时表 然后进行下一步查询下一个top100 把结果插入到刚才的临时表 然后继续 循环 最后把临时表的结果输出

可惜了我用的access数据库 临时表要用到存储过程 而access不支持 这个方案没搞到 哈哈  还有高人还帮我搞搞没有?

返回顶部网友评论»查看所有评论

发表评论:(内容不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。)

您的昵称:验证码: 验证码查看所有评论

About Hewei.org

何为的博客。记录我的生活点滴,技术经验,奇思妙想。无聊的时候看看自己记录的思想,也是一种享受。

订阅何为的博客
  • ZhuaXia 订阅到抓虾
  • SouYo 订阅到沙发
信息检索 In Hewei.org
Hot标签
最新推荐主题
最新推荐专题
  • google adsense
  • firfox
  • 域名无忧
  • 在线交友
XHTML 1.0 StrictValid CSS 2.1
何为博客!意欲何为?大有作为!Copyright © HeWei.Org
皖ICP备06010916号