表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的时间,有点慢!不知道能不能一句搞定,这样提高一下效率。
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的时间,有点慢!不知道能不能一句搞定,这样提高一下效率。
例如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
在过程里多放几个,确定哪里慢
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
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
好像有点意思了,但是查出来的不对!没有group by kind,
ID也要加入group才能执行,可是出来的顺序不对!
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分钟!
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才能执行??不理解
这句能不用like吗,这个很耗时
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的连接条件怎么没有
<一个都不能少>->"/国产片/喜剧片"中间还用"/"隔开,靠之!!
就是分类取记录的形试
pic用相同语句得到
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这样出来的不太容易循环,建议修改数据库结构。