主题:  这个问题比较简单,帮个忙

小小菜皮

职务:普通成员
等级: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%>
  
 <%
    rs.movenext                             
	loop                             
	end if                             
	rs.close                                  
%>
产品名字 点击数
目前还没有统计结果!  
<% if len(rs("title"))>8 then%> <%=""&Left(rs("title"),8)%>... <% else%> <%=""&rs("title")%> <% end if%> <%=rs("hits")%>



{ 在指尖上绽放的花朵 }

职务:普通成员
等级: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不可以吗


::和讯网 www.homeway.com.cn ::