表movie
id,kind,moviename,pic无序存放各种类别的电影
表kind
id,name
存放所有的电影类别movie的kind跟kind表的name对应,我现在想用一条SQL语句查出来每个kind.name下的前12部电影,以及每个kind.name下的第一个电影的PIC,然后做成循环。列成:
一个电影类别 
一个图片
这个电影类别下的前12部电影的名字循环出所有类别
我以前是这样做的,用第一条语句取得类别名和该类别名下的第一个图片:
select a.类别名称,b.图片地址 FROM dbo.影片类别 as a,dbo.影片库 as b where b.图片地址=(select top 1 图片地址 FROM dbo.影片库 WHERE 影片类型 LIKE '%'+a.类别名称+'%' order by id desc) ORDER BY a.排列顺序 asc
然后内嵌一个循环取出该类别下的前12部电影名字和ID
SELECT top 12 影片名称,ID FROM dbo.影片库 WHERE 影片类型 ="&rs("类别名称")&" ORDER BY id desc
10个类别循环下来就耗费120ms的时间,有点慢!不知道能不能一句搞定,这样提高一下效率。

解决方案 »

  1.   

    movie的kind跟kind表的name对应,改为用id连接看是否能快些!
      

  2.   

    搂主先确定哪里慢,可在过程里把时间打出来
    例如declare @time datetime,@show varchar(8000)
    set @show = 'begin 1:' +convert(varchar(20),getdate(),13)
    set @time = getdate()
    print @showselect ......set @show = 'begin 2:' +convert(varchar(20),getdate(),13)+' - ' + 
    cast(datediff(ms,@time,getdate()) as varchar) --这个显示了上一句所用的时间
    set @time = getdate()
    print @show
    在过程里多放几个,确定哪里慢
      

  3.   

    To:fxf66(),老大,是因为查询数据库次数太多才慢的,我想减少查询次数,所以想减少SQL语句数量!
      

  4.   

    lz,fxf66() 的方法可以一试,找到那句慢后,在查询时创建索引来减少一下查询时间
      

  5.   

    给你个思路,用子查询找每类靠前的12个
    select kind,moviename,max(pic)
     from movie a
    where (select count(*) from movie z
            where a.kind = z.kind
              and a.id >= z.id) <= 12
    group by kind,moviename
      

  6.   

    这个也许也成
    select kind,moviename,max(pic)
     from movie a
    where a.id in (select top 12 id from movie z
                    where a.kind = z.kind
                     order by ID)
    group by kind,moviename
      

  7.   

    to:hillhx(曾经的曾经) 
    好像有点意思了,但是查出来的不对!没有group by kind,
    ID也要加入group才能执行,可是出来的顺序不对!
      

  8.   

    select a.类别名称,b.图片地址,b.影片名称
    FROM dbo.影片类别 as a,dbo.影片库 as b 
    where b.id in (select top 12 id from 影片库 where 影片类型 LIKE '%'+a.类别名称+'%' order by 点播次数 DESC,ID DESC ) 
    ORDER BY a.排列顺序 asc这样列出来了,可是速度太慢了,在我自己的破机器上跑了近5分钟!
      

  9.   

    没明白,
    to:hillhx(曾经的曾经) 
    好像有点意思了,但是查出来的不对!没有group by kind,
    ID也要加入group才能执行,可是出来的顺序不对!你说
    select kind,moviename,max(pic)
     from movie a
    where a.id in (select top 12 id from movie z
                    where a.kind = z.kind
                     order by ID)
    group by kind,moviename这个不对????那个KIND你自己做的内连接不就出来了么?我就没写了
    另外如果需要排序就ORDER BY 一下不就好了?
    为什么ID也要加入group才能执行??不理解
      

  10.   

    where 影片类型 LIKE '%'+a.类别名称+'%' 
    这句能不用like吗,这个很耗时
      

  11.   

    select a.类别名称,b.图片地址,b.影片名称
    FROM dbo.影片类别 as a,dbo.影片库 as b 
    where b.id in (select top 12 id from 影片库 where 影片类型 LIKE '%'+a.类别名称+'%' order by 点播次数 DESC,ID DESC ) 
    ORDER BY a.排列顺序 asc
    表a和表b的连接条件怎么没有
      

  12.   

    我也不想用LIKE '%%' ,当初最早设计这个程序的人偏偏把一部电影同时归属不同的类,
    <一个都不能少>->"/国产片/喜剧片"中间还用"/"隔开,靠之!!
      

  13.   

    上面一个表就可以做到了,不需要kind的表了
    就是分类取记录的形试
      

  14.   

    每种kin的前12条记录:select tao.* from movie tao where tao.id in(select top 条数 id from movie where movie.kind=tao.kind) order by kind
    pic用相同语句得到
      

  15.   

    select a.类别名称,b.图片地址,b.影片名称
    FROM dbo.影片类别 as a,dbo.影片库 as b 
    where b.id in (select top 12 id from 影片库 where 影片类型 LIKE '%'+a.类别名称+'%' order by 点播次数 DESC,ID DESC ) 
    ORDER BY a.排列顺序 asc这样出来的不太容易循环,建议修改数据库结构。