отслеживание IP-адресов - PullRequest
0 голосов
/ 13 июля 2009

Я хочу отслеживать IP-адреса, которые посетили мой сайт. Я хочу знать, в какое время и какую страницу они посещают. Я храню IP-адрес в VISITORIP, дату, указанную в DATEENTERED, и URL-адрес страницы в столбцах HTTPADDRESS.

Я хочу сгруппировать их по датам. Мой результат должен быть таким:

TIME                    PAGE
 7/12/2009
3:16:27 PM  ?Section=products&SubSection=products&CATEGORYID=1
2:46:50 PM  ?Section=products&SubSection=products&CATEGORYID=8
2:20:45 PM  ?Section=products&SubSection=products&CATEGORYID=11
 7/11/2009
9:34:28 AM  ?Section=products&SubSection=products&CATEGORYID=7
9:33:31 AM  ?Section=products&SubSection=products&CATEGORYID=2
 7/10/2009
9:53:16 PM  ?Section=products&SubSection=products&CATEGORYID=9
9:34:14 PM  ?Section=products&SubSection=products&CATEGORYID=4
9:27:11 PM  ?Section=products&SubSection=products&CATEGORYID=3
9:15:47 PM  ?Section=products&SubSection=products&CATEGORYID=15

Проблема в том, что я не могу сгруппировать их по датам. Я получаю результат как:

07/12/2009
7/12/2009 3:16:27 PM    /html/default.aspProcess=HomeNewSeason&IMAGECONTENT=bg_home_newtaste.gif
7/12/2009 3:16:27 PM    /html/default.aspProcess=HomeBestSeller&IMAGECONTENT=bg_home_customerschoice.gif
07/12/2009
7/12/2009 3:16:27 PM    /html/default.aspProcess=HomeNewSeason&IMAGECONTENT=bg_home_newtaste.gif
7/12/2009 3:16:27 PM    /html/default.aspProcess=HomeBestSeller&IMAGECONTENT=bg_home_customerschoice.gif
07/09/2009
7/9/2009 5:37:02 PM     /html/default.aspSection=checkout
07/09/2009
7/9/2009 5:37:02 PM     /html/default.aspSection=checkout
07/09/2009
7/9/2009 5:37:02 PM     /html/default.aspSection=checkout

Мои коды:

<%
        Case "TrackIP"

        IPADDRESS = Request.QueryString("IPADDRESS") 

    SQL = "SELECT CONVERT(VARCHAR(10), DATEENTERED, 101) AS DATEENTERED"
    SQL = SQL & " FROM STATS"
    SQL = SQL & " WHERE VISITORIP = '"& IPADDRESS &"'"
    SQL = SQL & " GROUP BY DATEENTERED" 
    SQL = SQL & " ORDER BY DATEENTERED DESC"
    Set objDateEntered = objConn.Execute(SQL)   
%>
    <table>
        <thead>
            <tr>
                <th>Time</th>
                <th>Page</th>
            </tr>
        </thead>
        <tbody>
<% Do While Not objDateEntered.EOF %>
            <tr class="row-title">
                <td colspan="2"><%=objDateEntered("DATEENTERED")%></td>
            </tr>
<%
    SQL = "WITH LASTVISIT AS ("
    SQL = SQL & " SELECT VISITORIP, MAX(DATEENTERED) AS DATEENTERED"
    SQL = SQL & " FROM STATS"
    SQL = SQL & " WHERE VISITORIP = '"& IPADDRESS &"' AND CONVERT(VARCHAR(10), DATEENTERED, 101) = CONVERT(VARCHAR(10), '"& objDateEntered("DATEENTERED") &"', 101)"
    SQL = SQL & " GROUP BY VISITORIP"
    SQL = SQL & " )"
    SQL = SQL & " SELECT STATS.VISITORIP, STATS.HTTPADDRESS, STATS.DATEENTERED"
    SQL = SQL & " FROM STATS"
    SQL = SQL & " INNER JOIN LASTVISIT"
    SQL = SQL & " ON LASTVISIT.VISITORIP = STATS.VISITORIP AND LASTVISIT.DATEENTERED = STATS.DATEENTERED"
    SQL = SQL & " ORDER BY STATS.DATEENTERED DESC"
    Set objTrackIP = objConn.Execute(SQL)   
%>
<% Do While Not objTrackIP.EOF %>
            <tr class="row-a">
                <td><%=objTrackIP("DATEENTERED")%></td>
                <td class=""><%=objTrackIP("HTTPADDRESS")%></td>
            </tr>
<%
    objTrackIP.MoveNext
    Loop
%>
<%
    objDateEntered.MoveNext
    Loop
%>
        </tbody>
    </table>

edit: Я думаю, проблема в моем внешнем запросе. Но я сгруппировал их по полю DATEENTERED, я не знаю, что еще я могу сделать.

Ответы [ 3 ]

1 голос
/ 13 июля 2009

Первый запрос должен быть

"SELECT 
    DISTINCT CONVERT(VARCHAR(10), DATEENTERED, 101) AS vDATE 
 FROM 
    STATS 
 WHERE 
    VISITORIP = '"& IPADDRESS &"'" 
 ORDER BY 
    DATEENTERED DESC"

затем напечатайте столбец vData

и 2-й SQL

SELECT 
   VISITORIP, HTTPADDRESS, CONVERT(VARCHAR(8), DATEENTERED, 8) AS vTIME
FROM 
   STATS
WHERE
   CONVERT(VARCHAR(10), DATEENTERED, 101) = '" & objDateEntered("vDATE") &"'
   AND VISITORIP = '"& IPADDRESS &"'
ORDER BY VISITORIP ASC, DATEENTERED DESC

Я думаю, это поможет ...

0 голосов
/ 13 июля 2009

Если вы пытаетесь добиться отслеживания посетителей, вы подумали об использовании чего-то вроде Google Analytics ?

0 голосов
/ 13 июля 2009

Проблема в следующей строке кода:

SELECT CONVERT(VARCHAR(10), DATEENTERED, 101) AS DATEENTERED

и затем вы группируете к этой дате

GROUP BY DATEENTERED
ORDER BY DATEENTERED DESC

Вы группируете и заказываете varchar. Как я думаю, вам нужно использовать другой псевдоним даты, когда вы конвертируете его в ro varchar, но вам действительно нужно упорядочить по dateentered, то есть типу datetime.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...