高难度排序问题,求解

hyany 2008-11-28 10:07:26
在一个表中,记录了分别八个板块的所有信息浏览量统计,我想实现一个页面分别排序出不同板块的浏览量第一名出来。
详细解释
在表Table1中记录的是八个大板块的所有信息的浏览量统计,
其中关键参数class1是对应的八大板块的编号A1-A8
Atime是信息的发布时间
conn这条信息的是浏览的数量

统计第一板块七天内最新发布的信息的浏览量排行
sql = "select * from xinxi where yz=1 and class1=A3 and DATEDIFF('d',Atime,Now())<=7 order by llcs desc"
统计所有板块七天内最新发布的信息的浏览量排行
sql = "select * from xinxi where yz=1 and DATEDIFF('d',Atime,Now())<=7 order by llcs desc"

*******可我想统计class1= A1-A8的八个板块七天内信息浏览量的 八个第一名 该如何做呢?
请高手指教。。。。。。。。万分感谢
...全文
162 点赞 收藏 24
写回复
24 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Warrior_hsn 2008-12-06
mark
回复
taochunsong 2008-12-01
o,忘记赋值了

a(p,3)=rs( "shuliang ")
next


可以用二维数组,a(i,j) i表示板块id,j=0,i表示板块id,j=1,i表示板块名称,后面好输出 j=3,i表示最大数

然后要输出板块的话
fo k=1 to 8

response.write(a(k,3)& ": "&cstr(a(k,0)))
next

回复
taochunsong 2008-12-01
用存储过程来做比较简单,效率高一点
不过对你来说还是用几个语句比较容易做一点

先把8个板块读出来赋值给数组
a(i)=("",""...)

如果板块固定,或者没有板块表,也可以直接写上
a(1)="A1"
a(2)="A2"
...

可以用二维数组,a(i,j) i表示板块id,j=0,i表示板块id,j=1,i表示板块名称,后面好输出
备注:这里a(i)可能不是A1,也可能是id什么的。

然后循环、
for p=1 to 8
selectstr="select top 1 数量字段 as shuliang from xinxi where yz=1 and DATEDIFF('d',Atime,Now()) <=7 and class1='"&a(p)&"' order by llcs desc"
读数据库,取出最大数量,然后复制给新的数组
b(p)=rs("shuliang")
next


可以用二维数组,a(i,j) i表示板块id,j=0,i表示板块id,j=1,i表示板块名称,后面好输出

然后要输出板块的话
fo k=1 to 8

response.write(a(k,1)&":"&cstr(a(k,0)))
next


回复
hyany 2008-11-30
我很菜的,简单写点代码参考一下,谢了
回复
pumnfood 2008-11-29
将浏览量降排,
然后分别判断八大版块的第一条符合的记录
再赴给变量
如果记录过了则不判断了,否则继续判断

当全部记录完毕则退出
最后显示
回复
hyany 2008-11-29
分不够可以加,怎么解决呀,最差一步了~嘿嘿
回复
hyany 2008-11-29
用了一个笨的方法实现 差一点点了,请帮忙。。。。。
sql = "select top 8 * from xinxi where yz=1 and DATEDIFF('d',fbsj,Now()) <=7 order by llcs desc"
这样可以排出
商家推荐 乾地公司 10/0 前天23:26:36 剩余4天
房屋租售 临街好地脚门市房 4/0 前天17:57:57 剩余87天
家政家教 招收初中各年级学生,辅导数学2-3人 4/0 前天22:00:45 剩余27天
房屋租售 珍珠奶茶转让 2/0 前天20:00:22 剩余12天
招聘求职 招聘口腔医生 2/0 前天20:11:33 剩余12天
问题是第一名 大类是"商家推荐"一个
第二名和第四名房屋租售 出现了两个,我想让每个大类别只出现一个如何实现?
代码贴下面了 请参考do while ~~~``loop循环

select case Cint(cnmai)
case 1
sql = "select * from xinxi where yz=1 and hfcs>1 order by fbsj desc"
case 2
sql = "select top 4 * from xinxi where yz=1 and DATEDIFF('d',fbsj,Now()) <=7 order by llcs desc"




case -1
sql = "select top 60 * from xinxi where yz=1 order by fbsj desc"
Case Else
sql = "select * from xinxi where yz=1 and leixing='"& Unescape(Request.QueryString("fl")) &"' order by fbsj desc"
End Select


rs.open sql,conn,1,1
rs.Pagesize=30
Pagesize=rs.Pagesize
Allrecord=rs.Recordcount
Allpage=rs.Pagecount
if ThisPage<1 then
ThisPage=1
end if

On Error Resume Next
rs.move (ThisPage-1)*Pagesize
if rs.eof then
response.write "还没有添加信息!"
else
do while not rs.eof
b=trim(rs("b"))
bb=len(b)
response.write "<tr>"
response.write "<td style=""BACKGROUND-COLOR: #fbfbfb"" align=""middle"" width=""58"" height=""22"">"
Select Case rs("class1")
Case "0"
response.write ""
Case "21"
response.write "<font color=""#800000""><u>供求转让</u></font>"
Case "20"
response.write "<font color=""#FF00FF""><u>家政家教</u></font>"
Case "3"
response.write "<font color=""#008000""><u>房屋租售</u></font>"
Case "11"
response.write "<font color=""#FF6600""><u>商家推荐</u></font>"
Case "12"
response.write "<font color=""#ff0000""><u>招聘求职</u></font>"
Case "16"
response.write "<font color=""#000080""><u>二手市场</u></font>"
Case "17"
response.write "<font color=""#0000FF""><u>促销打折</u></font>"
Case "18"
response.write "<font color=""#008080""><u>吃喝玩乐</u></font>"
Case Else
response.write "<font color=""#000000""><u>"&rs("leixing")&"</u></font>"
End Select
response.write "</td>"
response.write "<td style=""BACKGROUND-COLOR: #fbfbfb"" align=""left"" width=""340"" height=""22"">"
if rs("tupian")<>"0" then
response.write "<img src=""image/pic.gif"" alt=""有图片"">"
end if
response.write "<a target=""_blank"" title="""&rs("diqu")&"-"&rs("name")&"-发布于"&datevalue(rs("fbsj"))&""" href=x.asp?cnmai="&rs("id")&">"
if rs("a")="0" then
response.write ""&mid(rs("biaoti"),1,20)&""
else
response.write "<font color=#"&rs("a")&">"&mid(rs("biaoti"),1,20)&"</font>"
end if
response.write "</a>"
if b<>0 then
response.write "<img src=""image/tj.gif"" alt=""置顶"">"
for i=1 to bb
response.write "<img src=""image/num/"&Mid(b,i,1)&".gif"" alt=""置顶"">"
next
end if
if rs("tuijian")="1" then
response.write "<img src=""image/num/jian.gif"" alt=""本站推荐"">"
end if
response.write "</td>"
response.write "<td style=""BACKGROUND-COLOR: #fbfbfb"" align=""middle"" width=""40"" height=""22"">"
if rs("jiage")=0 then
response.write "面 议"
else
response.write rs("jiage")
end if
response.write "</td>"
response.write "<td style=""BACKGROUND-COLOR: #fbfbfb"" align=""middle"" width=""50"" height=""22"">"&rs("llcs")&"/"&rs("hfcs")&"</td>"
response.write "<td style=""BACKGROUND-COLOR: #fbfbfb"" align=""middle"" width=""86"" height=""22"">"
response.write ""&cnmaisj(rs("fbsj"))&"</td>"
response.write "<td style=""BACKGROUND-COLOR: #fbfbfb"" align=""right"" width=""82"" height=""22"">"
dim sj
sj=DateDiff("d",now(),""&rs("dqsj")&"")
if sj>0 then
response.write "<font color=""#414141"">剩余"&sj&"</b>天</font>"
else
response.write "已经过期"
end if
response.write "</td></tr>"
tj=tj+1
rs.movenext
if tj>=Pagesize then exit do
loop
end if
rs.close
set rs=nothing
%>
回复
hyany 2008-11-29
还是不行哦,只能排列出8个序列,但没信息名字,也没信息内容和浏览量 只排了乱七八糟的八行。。。。看不懂
回复
情绝书生 2008-11-28
sql="Select sum(llcs) as llcs,class1 from Table1 where yz=1 and DATEDIFF('d',Atime,Now())<=7 group by class1 order by llcs desc"

'没测试过,自己调试下吧!
回复
wangkk125 2008-11-28
那个装表名的数组最好装 对应表的 sql语句
回复
wangkk125 2008-11-28
我的这是笨办法
每次循环查询赋值个数组后要清空rs
上面没写
回复
wangkk125 2008-11-28
和你说的有关系吗
回复
hyany 2008-11-28
个写的太高深了,有点看不懂
并且for 用不了因为八大板块数字不是连续的3 19 21 22 34 27这样的编号

汗。。。。。。。。。。。。。!!!!!!!
回复
hyany 2008-11-28
??????????????
回复
wangkk125 2008-11-28
定义一个存8个数据库表名的数组x[8]
定义8个数组存每个表的排名a[],b[],......
for i=0 to 7
set rs=server.creatobject("adodb.recordset")
sqlstr="select top 8 from "&x[i]&" "; / 查询语句
rs.open conn,sqlstr,1,1
循环赋值到对应的数组(a[],b[],....)
next
操作数组绑定数据到对应位置
回复
用一个语句,难整一些
回复
hyany 2008-11-28
~~~~~~~~~~~~~`上面几个地方有错误,重新编辑了下~~~~~~~~~~~~~~~~~`


在一个表中,记录了分别八个板块的所有信息浏览量统计,我想实现一个页面分别排序出八大板块的浏览量第一名出来。
详细解释
在表Table1中记录的是八个大板块的所有信息的浏览量统计,
其中关键参数class1是对应的八大板块的编号A1-A8
Atime是信息的发布时间
llcs这条信息的是浏览的数量

统计第一板块七天内最新发布的信息的浏览量排行
sql = "select * from Table1 where yz=1 and class1=A3 and DATEDIFF('d',Atime,Now()) <=7 order by llcs desc"
统计所有板块七天内最新发布的信息的浏览量排行
sql = "select * from Table1 where yz=1 and DATEDIFF('d',Atime,Now()) <=7 order by llcs desc"

*******可我想统计class1= A1-A8的八个板块七天内信息浏览量的 八个第一名 该如何做呢?
A1=XXX信息 浏览量70
A2=XXX信息 浏览量90
A3=XXX信息 浏览量80
请高手指教。。。。。。。。万分感谢
回复
lzp4881 2008-11-28
sql = "select class1,max(llcs) as ll from Table1 where yz=1 and DATEDIFF('d',Atime,Now()) <=7 group by class1"
回复
yxxue 2008-11-28
这个要用存储过程,很简单的
回复
hyany 2008-11-28
fbsj等于Atime
回复
加载更多回复
相关推荐
发帖
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
帖子事件
创建了帖子
2008-11-28 10:07
社区公告
暂无公告