关于提高ASP查询效率的问题

paladinzhu 2020-10-21 04:01:36
有一个数据库,资源数量24万条。

客户资源表1存储内容基本是:名字,电话,添加人,添加时间
用户信息表2存着30个用户信息,

每天不定时统计每个用户有多少个客户。
目前的方法:
strquery = "select name from o_user order by id asc"
set rs = conn.execute(strquery)
if not rs.bof then
do while not rs.eof
%>
用户:<%=rs("name")%>客户数:<%=call get rs("name")%> <br>

<%
rs.movenext
loop
%>

统计用户名下的客户数代码如下:因为每天是8点上班,所以统计的是07:00:00后的数据,d 是当天的日期,例如:2020-10-11
<%
Sub getnum(user,d)
Dim objRSa
Set objRSa=Conn.Execute("SELECT COUNT(id) FROM o_connection WHERE addtime > '"&d&" 07:00:00' and adduser='"&trim(user)&"'")
If (Not objRSa.bof) And (Not objRSa.eof) Then
CommNums=objRSa(0)
End If
Set objRSa=Nothing
Response.Write CommNums
End Sub
%>

以上方式可以正常运行,也可统计出准确的数据,但是执行很慢,每次刷新至少得30-40秒才有结果,请问有效率高的办法吗?
...全文
8467 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
paladinzhu 2020-10-23
  • 打赏
  • 举报
回复
上面的代码图片上错了。正确的如上图: 代码如下:可惜这个代码在运行器中可以运行,但是在ASP中运行没有结果。数据库为MYSQL,有没有高人指点一下? SELECT adduser, count(id) as num, count(if(cus7123='39',1,null)) AS bg, ‘参数为39的列的数量 count(if(cus7123='54',1,null)) AS bs, ‘参数为54的列的数量 count(if(cus7123<>'54' and cus7123<>'39',1,null)) AS other FROM o_connection WHERE addtime > '2020-10-23' GROUP BY adduser
paladinzhu 2020-10-23
  • 打赏
  • 举报
回复
已经弄出来了,代码如下:可惜这个代码在运行器中可以运行,但是在ASP中运行没有结果。数据库为MYSQL,有没有高人指点一下? SELECT adduser, count(id) as num, count(if(cus7123='39',1,null)) AS bg, ‘参数为39的列的数量 count(if(cus7123='54',1,null)) AS bs, ‘参数为54的列的数量 count(if(cus7123<>'54' and cus7123<>'39',1,null)) AS other FROM o_connection WHERE addtime > '2020-10-23' GROUP BY adduser
paladinzhu 2020-10-22
  • 打赏
  • 举报
回复
非常感谢,在这个问题上我增加一点拓展性的东西: 客户还进行了分类.比如有意向客户,潜在客户,打酱油的等.客户的类别(typed)标记分别用a,b,c,d 如果都列出来?:显示: 用户: 总客户数: 意向客户: 潜在客户: 万分感谢!
  • 打赏
  • 举报
回复 1
Set Dic = Server.CreateObject("Scripting.Dictionary") Set objRSa=Conn.Execute("SELECT adduser, COUNT(id) FROM o_connection WHERE addtime > '"&d&" 07:00:00' group by adduser") While Not objRSa.Eof Dic.add objRSa(0),1 Response.Write "用户:"& objRSa(0) &"客户数:"& objRSa(1) &"<br>" objRSa.MoveNext Wend strquery = "select name from o_user order by id asc" set rs = conn.execute(strquery) if not rs.bof then While Not Rs.Eof if not Dic.exists(rs("name")) then Response.Write "用户:"& rs("name") &"客户数:0<br>" end if Rs.MoveNext Wend end if
paladinzhu 2020-10-21
  • 打赏
  • 举报
回复
引用 2 楼 qq_63572063 的回复:
Set objRSa=Conn.Execute("SELECT adduser, COUNT(id) FROM o_connection WHERE addtime > '"&d&" 07:00:00' group by adduser")
While Not objRSa.Eof
Response.Write "用户:"& objRSa(0) &"客户数:"& objRSa(1) &"<br>"
objRSa.MoveNext
Wend


刚刚测试了,你这种方法效率很高,速度很快,但是带来一个问题,如果有用户的客户数为0,则列不出来。
  • 打赏
  • 举报
回复
Set objRSa=Conn.Execute("SELECT adduser, COUNT(id) FROM o_connection WHERE addtime > '"&d&" 07:00:00' group by adduser") While Not objRSa.Eof Response.Write "用户:"& objRSa(0) &"客户数:"& objRSa(1) &"<br>" objRSa.MoveNext Wend

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧