经典asp-尝试检索特定值的总数

mwecs4sa  于 2021-06-24  发布在  Mysql
关注(0)|答案(3)|浏览(304)

我真的希望有人能帮我。我目前正在用经典的asp编写代码,我使用的是sql数据库。
我们有一个支持页面,它使用网络登录id将所有访问记录到sql表中。这就是我的问题所在。
我需要显示前10名最高的网页访问者和前10名最低使用的访问者。例如,如果您看到下面的内容,这与我希望看到页面上的数据的方式类似:

访客访问

约翰50
莎拉45
提姆40
杰森35
亚历克斯30
罗布25
伊莱恩20
我一辈子都搞不懂怎么得到这些信息。我只想知道所有来访者的总数。现在,我们有了数据库中的数据。我只是不知道如何将每个访问者的总数放在一个页面上,然后将布局从最多的访问量设置为最少的访问量。从网上搜索到这里,我都试过了。没有什么能给我所需要的东西让它工作。我甚至尝试过使用count和total的不同方法,但是,唯一成功的查询是total visits overall,我只需要按visitor列进行细分。有人能帮我吗?
更新:
根据回答,我不确定要提供什么代码。我没有任何代码。我只是想用asp classic编写一种方法,从特定列中查询每个值的总计数。例如,如果名字“james”访问了站点10次,而数据库保存了他10次,我想在asp上查询这个总数。我不知道如何从数据库中获取列中每个名字的访问次数,并获得他们的总访问量。
更新2:
好的,这是我根据网上的其他资源建议尝试处理的代码:

Set Logs = Connect.Execute ("SELECT COUNT(*) AS VISITOR FROM dbo.Tracking GROUP BY VISITOR
s8vozzvw

s8vozzvw1#

因为我不帮忙而被批评。。。
@kwnwzlnd为您提供了数据库查询部分的拼图,但从您所说的问题,你不知道如何把它放入一个asp页面好这里是一个例子。

先有点背景

经典的asp开箱即用使用脚本语言vbscript,它严重依赖com组件来提供扩展功能,比如与数据库对话。在vbscript世界中,实现这一点的库称为ado(activex数据对象),是mdac(microsoft数据访问组件)的一部分。
adodb提供对对象的访问,这些对象允许您对数据库执行复杂的操作,这些对象包括(除其他外); ADODB.Connection -表示到数据源的打开连接。 ADODB.Recordset -表示基表中的整个记录集或已执行命令的结果。在任何时候,recordset对象都只引用集合中的一条记录作为当前记录。 ADODB.Command -定义要针对数据源执行的特定命令。

一个基本的例子

<%
Option Explicit

Dim cmd, sql, conn_str, rs
'Connection String used to connection to the MySQL 
'database - see https://www.connectionstrings.com/mysql/
conn_str = "Driver={MySQL ODBC 5.1 Driver};Server=myServerAddress;Database=myDataBase;User=myUsername;Password=myPassword;Option=3;"
sql = ""
sql = sql & "SELECT Table1.Visitor, Count(Table1.Visitor) AS Visits" & vbCrLf
sql = sql & "FROM Table1" & vbCrLf
sql = sql & "GROUP BY Table1.Visitor" & vbCrLf
sql = sql & "ORDER BY Count(Table1.Visitor) DESC;" & vbCrLf
sql = sql & "LIMIT 10;"

Set cmd = Server.CreateObject("ADODB.Command")
With cmd
  .ActiveConnection = conn_str
  .CommandType = adCmdText 'Named Constant value equals 1
  .CommandText = sql
  'Execute query and return results to a ADODB.Recordset
  Set rs = .Execute()
End With
%>
<ul>
<%
Do While Not rs.EOF
%>
  <li><%= rs("Visitor") & " - " & rs("Visits") %></li>
<%
  'Move to the next record in the returned Recordset.
  Call rs.MoveNext()
Loop
%>
</ul>
<%
'Cleanup after ourselves
Call rs.Close()
Set rs = Nothing
Set cmd = Nothing
%>

提供的代码未经测试
如果我这样做的话,我会做一些不同的事情,这只是一个起点,向前看,我肯定会推荐使用 GetRows() 方法 ADODB.Recordset 返回二维 Array 这样您就可以关闭数据库连接并继续使用数据,而不需要数据库开销。

记住

即使是这个简单的例子,它可能会提出更多的问题,然后回答。

qvsjd97n

qvsjd97n2#

对不起,sql不是mysql
我想你得把名字分组,然后数一数。选择按count desc和asc排序的前10个。

SELECT TOP 10 Table1.Visitor, Count(Table1.Visitor) AS Visits
FROM Table1
GROUP BY Table1.Visitor
ORDER BY Count(Table1.Visitor) DESC;

更新1
mysql使用limit而不是top(@w3schools):

SELECT Table1.Visitor, Count(Table1.Visitor) AS Visits
FROM Table1
GROUP BY Table1.Visitor
ORDER BY Count(Table1.Visitor) DESC;
LIMIT 10;
mitkmikd

mitkmikd3#

我只想说谢谢大家的帮助。在op得到答复后的几天,我想出了一个办法,使您的建议适合我的业务需要。我想和大家分享一个我在你的帮助下工作的例子。
我在sql中使用了一种特定的日期格式,必须将日期更改为数组才能工作。我甚至可以增加军衔!我知道这看起来很业余,但很管用。现在我明白了它的工作原理。再次感谢你的帮助。
下面是一个例子,以防有人感兴趣(我知道有点晚了,但我想我会分享):

Set Logs = Connect.Execute ("SELECT TOP 20 AnalystID, Count(*) AS N FROM dbo.Analysts WHERE Visits = '" & DateArr(0) & DateArr(2) & "' AND AnalystID <> 'siteadmin1' AND AnalystID <> 'siteadmin2' GROUP BY AnalystID ORDER BY COUNT(*) DESC")

If Logs.eof Then

 Else
Do While Not Logs.Eof
iRank = iRank + 1

    Set Con = Server.CreateObject("ADODB.Connection") 
    Con.Open = "Provider=SQLOLEDB;Data Source=" & DatabaseServer & ";Integrated Security=SSPI;Network Library=DBMSSOCN;Initial Catalog=HRDB;"
            Set myRecordSetRDR = Con.Execute ("SELECT * FROM dbo.HRDBTBLL With(NoLock) WHERE WDW_LGON_ID = '" & Logs("AnalystID") & "'")
            If myRecordSetRDR.EOF Then
            Else
                strANALYSTFULLNAMEReport = myRecordSetRDR("WKR_FLL_NM")
                'response.write myRecordSetRDR("WKR_FLL_NM")
            End If 
    Con.Close () 

    If left(Logs("AnalystID"),3) = "NBE" Then
        strANALYSTFULLNAMEReport = "N/A"
    End If

    If left(Logs("AnalystID"),2) = "ZE" Then
        strANALYSTFULLNAMEReport = "N/A"
    End If      
response.write "<tr>"
    response.write "<td>"
    Response.Write "<center>" & iRank & "</center>"
    Response.write "</td>"
    response.write "<td>" & formatnumber(Logs("N"),0) & "</td><td>" & Logs("AnalystID") & "</td><td>" & strANALYSTFULLNAMEReport & "</td>"
    response.write "</tr>" 
Logs.Movenext
Loop

相关问题