zoukankan      html  css  js  c++  java
  • 从各个分类中各取出前N个记录

    经常会遇到这样的需求,一张详细新闻表,一张新闻类别表,详细新闻表引用了新闻类别的类别编号,同时存主外键关系,现在需要查询每一个类别的前10条记录,并显示于前台页面上。

    我见到过有人用循环读取每一个分类别的方法,然后再用每一个分类编号去查询对应的前10条记录,最后合并成一个DataTable对象,最后把数据源绑定到前台。这样做法也能达到显示效果,但是效率怎么样呢?我敢肯定地说,如果数据量不多,或许勉强应付得过去,如果数据量多的话,不行。

    那么有什么办法可以解决这个问题呢?

    先看一个例子

    如一班级成绩表

    现建立课程表 tableA

    sid         sname
    1             语文
    2             数学
    3             英语

    建学生成绩库 tableB

    id         sid           fen           name
    1          1             100           张三
    2          1              89            李四
    3          1              95            王五
    4          2             89             张三
    5          3             78             王五
    6          2             99             王五

    可以显示出所有科目前10名单

    select a.sid,sname,id,fen,name from tableA a inner join
       (select * from tableB b
           where id in(select top 10 id from tableB where sid=b.sid
           order by fen desc)) as b
           on a.sid=b.sid
           order by a.sid,fen desc

    SELECT sid, sname, fen,name FROM (SELECT px =(SELECT COUNT(1) + 1  FROM tableB  WHERE sid = b.sid AND fen > b.fen), a.sid, a.sname, b.fen,b.name FROM tableA a JOIN tableB b ON a.sid = b.sid) t WHERE (px <= 10) ORDER BY sid, fen DESC

    同样的引申到那个新闻表的问题也可以依此类推。我觉得这个解法比循环查询要好多了,不知道有没有更好的解决办法?

  • 相关阅读:
    Python阶段复习
    Python阶段复习
    Python学习笔记
    Python爬虫学习
    Python爬虫学习
    Python学习笔记
    史上最全的Maven Pom文件标签详解
    css3 animation动画技巧
    常用的sass编译库
    compass做雪碧图
  • 原文地址:https://www.cnblogs.com/cgli/p/1945267.html
Copyright © 2011-2022 走看看