|
主题: 这个问题比较简单,帮个忙
|
 小小菜皮
职务:普通成员
等级:1
金币:1.0
发贴:180
注册:2002/4/1 17:44:38
|
#12003/5/16 13:59:14
请各位大侠帮我看看,为什么我的 select top 的数字只要大于6就不生效,就会把数据库的所有值列出来? 还有,我的代码有否写的太冗?可以减哪些?
产品名字 |
点击数 |
<%
Set rs= Server.CreateObject("ADODB.Recordset")
sql="select top 10"
sql=sql& " product.newsid,product.title,product.hits,product.money"
sql=sql&" from product where queding='通过'"
sql=sql&"order by hits desc"
rs.open sql,conn,1,1
if rs.eof and rs.bof then
%>
目前还没有统计结果! |
|
<%else%>
<%do while not rs.eof%>
<% if len(rs("title"))>8 then%>
<%=""&Left(rs("title"),8)%>...
<% else%>
<%=""&rs("title")%>
<% end if%> |
<%=rs("hits")%> |
<%
rs.movenext
loop
end if
rs.close
%>
|
 { 在指尖上绽放的花朵 }
职务:普通成员
等级:5
金币:14.0
发贴:3209
注册:2002/7/25 21:24:11
|
#22003/5/16 15:00:23
喔喔…… 终于找到了喜欢手写代码的同党了~~ 哇哈哈~~~ 问题的话…… 不是很确定,看看是不是这个? sql=sql&"order by product.hits desc" 至于程序方面~ ASP 是在服务器端运行的,所以只要没有算法的问题, 怎么写还是很自由di~ 毛病的话…… 下次手写的时候注意一下格式吧? 不要对自己那么残忍亚~
编辑历史:[这消息被行者编辑过(编辑时间2003-05-16 15:02:18)]
|
 小小菜皮
职务:普通成员
等级:1
金币:1.0
发贴:180
注册:2002/4/1 17:44:38
|
#32003/5/16 15:24:44
你说的也对。 不是这个问题。 很奇怪,如果只是select top 6条以下 那么显示的记录数就是正常的,记录的排列顺序也没错。可是只要是大于等于6以上的,就会列出所有符合条件的记录。不管Top几。
但代码冗的话确实不好,影响速度。比如我上面的 sql=sql& " article.newsid,article.title,article.hits,article.zznews" 写得真是很蠢
我试着改成 sql=sql& " article.newsid,title,hits,zznews" 也可以。
编辑历史:[这消息被小小菜皮编辑过(编辑时间2003-05-16 15:27:55)]
|
 彩云传说
职务:普通成员
等级:2
金币:10.0
发贴:618
注册:2001/5/27 21:26:20
|
#42003/5/16 16:42:55
如果你是在测试数据阶段,那么这个问题很简单。你的某段数据的数值重合了。 我假设你做的是一个产品销售排行榜。你以点击数hit做为选择记录的条件。按降序排列记录。
那么假设你目前产品点击数 A=100,B=80, C=60,D=50,E=50,F=50,G=50 此时虽然你select top 5 但仍会显示 A B C D E F G 因为D,E,F,G同为50,所以都被列举出来了
|
 小小菜皮
职务:普通成员
等级:1
金币:1.0
发贴:180
注册:2002/4/1 17:44:38
|
#52003/5/16 20:55:44
呀,我改了数据库的HITS的值,果然如此。 那有什么办法,强行只显示10条呢?不管重复的?
|
 { 在指尖上绽放的花朵 }
职务:普通成员
等级:5
金币:14.0
发贴:3209
注册:2002/7/25 21:24:11
|
#62003/5/17 12:07:44
显示的时候做个判断? ……
<%
if Rs("hits") <> Rhits then
Rhits=Rs("hits"):Response.write Rs("hits")
end if
%> |
……
|
 彩云传说
职务:普通成员
等级:2
金币:10.0
发贴:618
注册:2001/5/27 21:26:20
|
#72003/5/17 15:41:38
定义一个 i做为判断条件,当于i大于等于10结束循环 ......
<%
i=0
do while not rs.eof%>
.................
<%
rs.movenext
i=i+1
if i>=10 then exit do
loop
end if
rs.close
%>
|
 小小菜皮
职务:普通成员
等级:1
金币:1.0
发贴:180
注册:2002/4/1 17:44:38
|
#82003/5/17 18:44:37
搞定了。 谢谢闻西,谢谢行者
|
 { 在指尖上绽放的花朵 }
职务:普通成员
等级:5
金币:14.0
发贴:3209
注册:2002/7/25 21:24:11
|
#92003/5/17 23:47:24
喔…… 彩云前辈的方法似乎有bug?
我开始也是这样想的,然后突然想到这样的情况。
以SELECT TOP 3为例~
这样的数据5,4,4,4,4,4,3,3,2,。
如果使用for 循环的话,应该显示结果是5,4,4?
不知道我的说法对不对?
|
 彩云传说
职务:普通成员
等级:2
金币:10.0
发贴:618
注册:2001/5/27 21:26:20
|
#102003/5/18 4:12:28
对,是这样子的。 小小的意思我想是只显示前10条记录,不是要求不能取重复值吧. 如果说是有重复的要跳到下一个记录,那这样子同样点击率的产品就会被忽视了,这样又不能反应最有人气产品的情况了. 如果要求有重复的值跳到下一记录,那么还要做个数据筛选.
编辑历史:[这消息被达闻西编辑过(编辑时间2003-05-18 04:18:50)]
|
 { 在指尖上绽放的花朵 }
职务:普通成员
等级:5
金币:14.0
发贴:3209
注册:2002/7/25 21:24:11
|
#112003/5/18 12:28:25
呵呵…… 谢谢前辈指教。
|
 小小菜皮
职务:普通成员
等级:1
金币:1.0
发贴:180
注册:2002/4/1 17:44:38
|
#122003/5/18 22:43:44
是的,闻西说的对,我就要这个效果。等我需要有筛选功能的时候,我可要再来请教二位大哥哦。
|
 彩云传说
职务:普通成员
等级:2
金币:10.0
发贴:618
注册:2001/5/27 21:26:20
|
#132003/5/19 13:45:46
前辈和指教二字,万不敢当。 行者的编程思路颇具想像力,我一向欣赏。
|
 寻梦帆
职务:普通成员
等级:1
金币:0.0
发贴:71
注册:2003/5/21 8:54:17
|
#142003/5/21 11:16:58
呵呵~~~
|
 namelysweet
职务:普通成员
等级:3
金币:1.0
发贴:681
注册:2002/2/17 14:52:38
|
#152003/5/21 13:44:50
select distinct不可以吗
|