![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: PHP
SQL Query zum Ermitteln von Besucherstatistiken über mehrere Zeiträume
Hallo zusammen,
ich versuche grade ein paar einfache Statistiken in ein PHP Projekt zu implementieren. Dazu habe ich mir eine Datenbanktabelle angelegt, in der ich jeden Seitenzugriff (View) protokolliere. Dabei speichere ich neben einigen anderen Informationen primär einen Timestamp und die IP des Besuchers. Will ich jetzt die "eindeutigen" Besucher über einen bestimmten Zeitraum abfragen, mache ich das mit:
Code:
Nun habe ich mich daran gewagt einen Grafen mit der Statistik für die letzten 14 Tage zu erstellen. Bisher berechne ich auf PHP Seite in einer Schleife jeweils den Start- und Endzeitpunkt des jeweiligen Tages und feuere dann die Query ab. Das macht allerdings in diesem Falle schon 14 einzelne Querys, was meiner Meinung nach alles andere als schön ist und vermutlich auch ziemlich auf die Performance geht.
SELECT COUNT(DISTINCT `ip`) AS `count` FROM `webstats` WHERE `timestamp` >= {min} AND `timestamp` <= {max}
:arrow: Meine Frage ist nun, ob es möglich ist, in einer einzigen Query die Statistik für mehrere Zeiträume zu ermitteln? Viele Grüße Zacherl |
AW: SQL Query zum Ermitteln von Besucherstatistiken über mehrere Zeiträume
Habe einen Weg gefunden:
Code:
In diesem Falle entspricht $time_start dem Begin des -14. Tages und $time_end ist der Timestamp des aktuellen Tages. Jetzt gibt es allerdings noch einen kleinen Schönheitsfehler. Und zwar werden Tage, für die kein einziger Datensatz existiert, natürlich auch nicht in die Ergebnismenge mit aufgenommen. Sprich: Mein Result über 14 Tage kann durchaus nur 3 Datensätze enthalten. Dadurch wird die Zuordnung von Besucheranzahl zu Tag recht umständlich.
SELECT COUNT(DISTINCT ip) as count FROM `webstats` WHERE (`timestamp` >= $time_start AND `timestamp` <= $time_end) GROUP BY DATE(FROM_UNIXTIME(`timestamp`))
:arrow: Ist es möglich an dieser Stelle für nicht vorhandene Tage einen "NULL Datensatz" einzufügen? |
AW: SQL Query zum Ermitteln von Besucherstatistiken über mehrere Zeiträume
Nicht schön, aber könnte man nicht für jeden Tag ein "Select 0, Tag..." via Union hinzufügen.
Auch im ursprünglichen Select den Tag dazupacken. Dann um das Ganze ein "Select Max(count) from (...) Group By Tag" drumpacken? |
AW: SQL Query zum Ermitteln von Besucherstatistiken über mehrere Zeiträume
Kleine Erweiterung um neben der Besucherzahl auch die Anzahl der Zugriffe abzufragen:
SQL-Code:
SELECT COUNT(DISTINCT ip) as count, COUNT(*) as totalHits FROM webstats WHERE ...
Um die fehlenden Datensätze an denen es keine Zugriffe gab aufzufüllen könnte man eine "Datumstabelle" verwenden.
So kannst du nicht nur Tages- sondern auch Wochen- und Monatsstatistiken erstellen. Mit dem Wochentag kannst du z.B. die Zugriffe eines ganzen Jahres verwenden und dann zu ermitteln wie sich das über die Wochentage Montag bis Sonntag darstellt. |
AW: SQL Query zum Ermitteln von Besucherstatistiken über mehrere Zeiträume
---gelöscht--- sx2008 hatte genau das gleiche geschrieben. Ich brauch ne Brille.
|
AW: SQL Query zum Ermitteln von Besucherstatistiken über mehrere Zeiträume
Ahh so eine JOIN Lösung sollte genau das sein, was ich brauche. Allerdings verstehe ich noch nicht so ganz, wie ich das umsetzen soll. Es würde ja nicht reichen diese "Datumstabelle" einmalig anzulegen, sondern man müsste sie ja z.b. jedes Jahr erweitern. Gibt es da eine geschickte Möglichkeit, die ich grade übersehe? Ich möchte ja auch nicht vor jedem INSERT erstmal mit einem SELECT prüfen, ob die Datumstabelle aktuell ist, um sie ggfls. erst zu erweitern.
Und noch eine kurze Frage: Ist mein Ansatz von der Performance her überhaupt tragbar für große Websites? Es werden durch die Seitenaufrufe ja doch eine riesige Menge an Daten generiert. |
AW: SQL Query zum Ermitteln von Besucherstatistiken über mehrere Zeiträume
Zitat:
Wenn du natürlich (was sinnvoll wäre) die arbeitsfreien Tage (Betriebsfest, -Versammlung etc.) eintragen willst, dann lieferst Du noch einen Editor dazu. Die Feiertage (je Bundesland) gibts im Netz (und eine Delphi-Komponente gibts auch) Ich z.B. finde folgende Infos sehr spannend: Der wievielte Tag im Monat/Jahr, Der wievielte Arbeitstag im Monat/Jahr usw. Damit kannst Du wunderbare Statistiken erstellen (Summe bis zu diesem Tag / der wievielte AT). Zuhause habe ich noch ein olles Projekt in Delphi, das so eine Dimensionstabelle erstellt. Kann ich ja hier mal reinstellen. |
AW: SQL Query zum Ermitteln von Besucherstatistiken über mehrere Zeiträume
Zitat:
Da ich für dieses Projekt sowieso PHP verwenden muss, kann ich die Datumstabelle mit den doch sehr mächtigen Time/Date Funktionen vermutlich recht einfach geneieren. Ich versuche mal mein Glück. Danke euch allen! |
AW: SQL Query zum Ermitteln von Besucherstatistiken über mehrere Zeiträume
Zitat:
![]() PS: Das wäre dann natürlich ein LEFT JOIN
Code:
Select DateDimension.DateCol,
myData.myResults from DateDimension LEFT JOIN myData where DateDimension.DateCol between <FirstDate> and <LastDate> |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz