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

时间:2016-10-05 11:37:05

标签: mysql asp-classic

我真的希望有人可以帮助我。我目前正在编写经典的asp,我使用SQL数据库。

我们有一个支持页面,使用他们的网络登录ID将所有访问记录到sql表中。这就是我遇到问题的地方。

我需要显示该页面的前10名访问者和前10名最低访问者。例如,如果您在下面看到,这与我希望在页面上看到数据的方式类似:

访客访问

  • John 50
  • Sarah 45
  • Tim 40
  • Jason 35
  • Alex 30
  • Rob 25
  • Elain 20

我不能为我的生活,弄清楚如何获得这些信息。我想要的是获得所有访客访问量的总数。现在,我们在数据库中有数据。我只是不知道如何在页面上放置每个访问者的总计数,然后格式化从大多数访问到最低访问的布局。我已尝试过在网上搜索的所有内容,甚至在这里。什么都没有让我得到我需要的工作。我甚至尝试过使用count和total的不同方法,但是,唯一成功的查询是总访问次数,我只需要按访问者列分类。有人可以帮助我吗?

更新:

根据回复,我不确定要提供什么代码。我没有任何代码可以给。我只是尝试用asp-classic编码来查询每个值的特定列的总计数。因此,例如,如果名称“James”访问该站点10次并且数据库已将其保存10次,我想在asp上查询该总数。我不知道如何从数据库中获取列中每个名称的计数并获得他们的总访问量。

更新2:

好的,基于网上的其他资源建议,这是我试图摆弄的代码:

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

3 个答案:

答案 0 :(得分:1)

抱歉,MS-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;

答案 1 :(得分:1)

因为我getting criticised没有帮助......

@kwnwzlndprovided you the database query part of the puzzle但是根据你在问题中所说的,你不知道如何把它放到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()的{​​{1}}方法来返回2D {{1记录集,你可以关闭数据库连接并继续使用数据而不需要数据库开销。


记住

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

答案 2 :(得分:0)

我只是想感谢所有人的帮助。在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