Tim: MySQL: "Visits" aus Tabelle filtern

Hallo.

Ich habe eine Tabelle mit den Feldern: id, dt, ru, ip, ho und ua. In dieser Tabelle speichere ich jeden Seitenzugriff. Im einzelnen ist das das das Datum mit Uhrzeit (dt), angefragte Seite (ru), Client-IP (ip), Client-Host (ho) und der User-Agent des "Anfragestellers" (ua).

Nun wöllte ich aus diesen Daten gerne eine Aussage über die tatsächlichen Besuche treffen wollen. Und dies möglichst gleich in der Datenbankabfrage. Es soll also in etwa sowas rauskommen:

Monat   Besuche
07/01   123
07/02   456
07/03   333
...

Bisher sieht meine Datenbankabfrage so aus, dass sie die Daten nur anhand des Feldes dt gruppiert und gibt folglich nur die Übersicht über die Zugriffe wieder, nicht über die Besuche:

SELECT COUNT(*) as n, DATE_FORMAT(dt, '%y/%m') as ym FROM stats GROUP BY ym ORDER BY ym DESC;

Da ich hier (bei diesem Webauftritt, wozu dieses Problem gehört) nun einzelne Benutzer nicht an Sitzungs-IDs erkennen kann, sondern eben nur die Tabelle mit den einzelnen Zugriffen habe, steck´ ich etwas fest. Irgendwie müsste man ja anhand der Zeit (dt) und dem Host (ho) und/oder dem User-Agent beispielsweise einen Client mehr oder weniger über einen vorher festgesetzten Zeitraum wiedererkennen können, auch, wenn natürlich die Möglichkeit besteht, dass mehrere unterschiedliche Leute die selbe IP haben und gleichzeitig, bzw. in dem festgelegten Zeitraum, eben diese Seite besuchen. Aber daran kann ich auch nichts ändern. Mir steht eben nur diese Tabelle da zur Verfügung.
Ferner muss ja irgendwie auch beachtet werden, dass ein Benutzer womöglich länger, als der festgelegte Zeitraum auf der Seite verweilt und kann daher nicht einfach nach z.B. 1 Stunde strikt sagen, dieser Benutzer (sprich der Client mit der IP/Host und User-Agent) ist nun ein neuer Besucher.

Kurzum: Ich weiß nicht so richtig, wo ich ansetzen soll. Vorallem, wenn ich derartige Angaben über die Besuche nur aus dieser Tabelle generien soll. Für sachdienliche Hinweise wäre ich sehr dankbar.

Mit freundlichen Grüßen, ich.

  1. yo,

    Ich habe eine Tabelle mit den Feldern: id, dt, ru, ip, ho und ua.

    schreckliche namen, die bezeichnung der spalten sollten einem schon einen intuitiven eindruck vermitteln, welches attribut dort enthalten ist. mit deinen akürzungen ist es unmöglich, ich würde das ändern, falls es in deinen händen liegt.

    wie auch immer, die abfrage selbst ist trivial, es ist eine gruppierung, wie du schon richtig angewandt hast. wichtig ist aber, anhand welchen kriterien du einen besuch ausmachen willst. wenn das fest steht, ist die abfrage ein kinderspiel. aber ohne diese festlegung kann man auch keine abfrage erstellen. mein rat an dich wäre also, leg erst mal die regeln fest, welche daten der zugriffe als ein besucher zusammengehören und welche nicht.

    Ilja

    1. Hallo Ilja.

      Kriterien? Derer bin ich mir ja nicht so recht sicher, wie aus der zweiten Hälfte herauszulesen ist. Aber ich lege nun einfach mal folgendes testweise fest:

      Der Benutzer ist ein und derselbe, solange er in einem Zeitraum von meinetwegen 1 Stunde eine Anfrage an die Seite sendet. Und bei einer solchen Anfrage soeines Benutzers möge die Zeitraum wieder zurückgesetzt werden. Das allein macht es ja unmöglich einfach im Zeitstempel-Feld (in der Datenbank als "dt" bezeichnet; vom Typ DATETIME) einfach den ersten und letzten Eintrag anhand der IP und/oder des User-Agent herauszusuchen, der binnen 1 Stunde auftrat und alle dazwischen quasi zu elliminieren, um die Anzahl der Zugriffe auf die Anzahl der tatsächlichen (zuindest nach den festgelegten Kriterien) Besuche anzunähern. Möglicherweise sehe ich das aber auch irgendwie komplizierter, als es tatsächlich ist gerade.

      btw: Nein, ich habe keinen Einfluss auf die Bezeichnung der Datenbankfelder :-(

      Tim

      1. yo Tim,

        habe deine antwort übersehen, vieleicht bist du ja noch hier. wenn das kirterium eine stunde ist, dann gruppiere über die ip-adresse und den das datum mit zeit, wobei du die minuten abschneidest und nur das jahr, monat, tag und stunde hast

        Ilja