Richtige Query für Page-Counter

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Richtige Query für Page-Counter

    Hi,

    ich hab ein kleines Problem mit einem Page-Counter für den ich nun versuche, den richten SQL zu formulieren.

    Und zwar sieht meine Seite so aus, dass bei jeden Aufruf in einer Statistik-Tabelle folgende Werte mitgeloggt werden: id (auto-increment), IP-Adresse, Timestamp und Content-ID. Aus dieser Tabelle erstelle ich nun auch diverse Statistiken, z.B. wie oft welche Content-ID aufgerufen werden usw.

    Auf Basis dieser Tabelle möchte ich nun auch ganz einfach eine Page-Counter Fkt. basteln, aber ich hänge immer wieder an der passenden Abfrage.

    Wenn ich beispielsweise einfach nur "select ip from statistik group by ip" abfrage und die Anzahl ausgebe, werden die Aufrufe die ein User (innerhalb mehrerer Stunden aber mit der gleichen IP) macht, ja nicht mitgezählt. Wie müsste nun die Abfrage lauten, wenn ich über den Timestamp eben diesen Zeitraum durch z.B. eine Konstante definieren will, so dass z.B. nach 1800 Sekunden (trotz gleicher IP) ein die Seitenaufrufe insgesamt um 1 mehr gezählt werden.

    Habt Ihr mein Problem verstanden?! Oder ist mein Datenbankmodell ungünstig mit einer solchen Statistik-Tabelle, wo ständig mitgeloggt wird. Sollte ich evtl. doch noch eine Tabelle machen?

    thx!

  • #2
    Ich würde einfach eine weitere Tabelle erstellen, in die ich in einem neuen Datensatz bei jedem Seitnaufruf die IP-Adresse und den Timestamp eintrage, sofern zu der IP-Adresse kein Datensatz mit einem Timestamp, der jünger als 1800 ist, existiert.
    Die Zahl der vorhandenen Datensätze ist dann quasi der Counter.

    Kommentar


    • #3
      Hallo!
      Wenn ich Dich richtig verstanden habe möchtest Du:
      Anzahl der Unterschiedlichen IPs innerhalb eines Zeitraums pro Content.

      Der Zeitraum muss dann erstmal "gleich" gemacht werden, z.B. mit
      round( UNIX_TIMESTAMP(TS)/1800,0)
      (TS:Timestamp)

      dann muss die IP 'dran und Unterschiede gezählt werden.

      Gibt:

      select
      Content,
      count(distinct( concat( round( UNIX_TIMESTAMP(TS)/1800,0),'_', IP) )) as anzahl
      from Tabelle
      group by Content

      Kommentar


      • #4
        Hi @ fuser,

        tut mir leid, aber ganz so fit bin ich in MySQL noch nicht. Ich würde einen Umweg über PHP gehen und bei jedem Seitenaufruf mit

        select * from Tabelle where IP=$ip and TIMESTAMP>(aktuelle Zeit-1800);

        überprüfen, ob in den letzten 1800 Sekunden eine User mit der IP die Seite betreten hat. Wenn das nicht der Fall ist, würde ich mit

        insert into Tabelle (IP, TIMESTAMP) values ($ip, aktuelle Zeit);

        einen neuen Datensatz hinzufügen, und diese Datensätze dann zählen.

        Wenn das auch direkt mit einer Abfrage funtioniert, umso besser!!!

        Würdest Du mir einmal Deine Abfrage erklären? Ich verstehe die nicht so ganz!

        Kommentar


        • #5
          Hallo Hendrik2
          Das Prinzip: Man erzeugt Zeilen die sich bei den Kriterien ändern und zählt diese.
          +1 Gezählt werden soll wenn
          1. unterschiedliche "Zeiträume"
          2. unterschiedliche IPs

          Um den Zeitraum zu definieren kann man das Datum in UNIX_TIMESTAMP umwandeln,
          heraus kommt eine Ganzzahl mit einer Auflösung von einer Sekunde.
          Wichtig ist nicht was sie darstellt sondern wann sie sich ändert.
          Die Zahl geteilt durch z.B. 60 ohne Nachkommas ändert sich dann einmal pro Minute.

          Die IP wird 'drangehängt (->CONCAT), es entsteht eine Kombination aus IP und Zeitraum.
          Die Anzahl (COUNT) der verschiedenen (DISTINCT) Datensätze ist dann das Ergebnis.

          Das ganze dann noch pro Content (-> GROUP BY Content)

          [edit]
          Wenn er die IP auch sehen wollte, wär's einfacher zu verstehen:
          Dann wäre die IP im Select und GROUP BY.
          Gezählt würde dann die unterschiedlichen Zeiträume, der CONCAT wäre weg.
          Zuletzt geändert von fuser; 15.06.2004, 13:30.

          Kommentar


          • #6
            Danke!

            Jetzt habe ich's verstanden

            Kommentar

            Lädt...
            X