Datensätze nach Muster zusammenfassen

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

  • Datensätze nach Muster zusammenfassen

    Tag,

    habe folgende Tabelle

    PHP-Code:
    +---------+------------------+------+-----+---------+-------+
    Field   Type             Null Key | Default | Extra |
    +---------+------------------+------+-----+---------+-------+
    bereich varchar(100)     |      |     |         |       |
    ip      varchar(15)      |      |     |         |       |
    zeit    int(10unsigned |      |     | 0       |       |
    browser tinytext         YES  |     | NULL    |       |
    notiz   text             YES  |     | NULL    |       |
    +---------+------------------+------+-----+---------+-------+ 
    Das Ganze soll ein Zugriffslog darstellen, bei jedem Zugriff auf das entsprechende Skript wird ein Eintrag mit den Werten für bereich, ip und zeit (unix timestamp) in die Tabelle eingetragen.

    Ich möchte nun beim Zählen der Datensätze diese soweit zusammenfassen, dass Einträge mit der selben IP und dem selben Bereich die zeitlich gesehen weniger als eine bestimmte Anzahl von Sekunden auseinander sind zu einem zusammengefasst werden.

    Ich dachte das geht irgendwie mit SELECT COUNT(DISTINCT vergleichsausdruck) ... aber die MySQL-Manual ist bei der Beschreibung dieses Konstruktes leider etwas knapp....hat jemand ne Idee?

  • #2
    Hm... versuch mal mit einem CROSS JOIN der selben Tabelle, gruppiere nach IP und Bereich, in Where-Klausel prüfst du die Differenz von zeit.

    Kommentar


    • #3
      Argh....das dauert viel zu lange - fast ne Minute bei 15600 Datensätzen.
      Habe ne eigene Variante:
      Nach bereich, ip und zeit sortiert rausholen und mit PHP zählen.

      Kommentar


      • #4
        das wird komliziert,

        IMHO dürfte das größte Problem sein die Datumswerte so zusammenzufassen, daß sie nicht mehrmals ins Ergebnis rutschen

        angenommen folgende Datumswerte
        16.09.2004
        18.09.2004
        19.09.2004
        Zusammenfassung der Werte +/-2 Tage

        würde heißen im ersten Fall würde Resultat 2 ergeben
        beim zweiten Durchlauf 3 (obwohl beide Werte eigentlich schon im ersten Ergebnis stehen
        beim dritten Durchlauf wiederum 2 (18.09 wäre bereits zum 3x gezählt...)

        muß es denn in einer einzigen SQL Anweisung realisiert werden ???

        IMHO wirst Du nicht im mehere JOINS und/oder Subqueries herumkommen

        vielleicht kann auch Deine SQL-Version etwas weiterhelfen

        OffTopic:
        vielleicht steh ich aber heute auch komplett auf der Saff' ("Seife" )
        war gestern eine lange Nacht

        Kommentar


        • #5
          Original geschrieben von MaxPayne
          Argh....das dauert viel zu lange -
          was bei CROSS JOIN nicht anders zu erwarten war

          Kommentar


          • #6
            PHP-Code:
            mysqlselect bereich,zeit,ip,sprache from bn_logs order by bereich,ip,zeit limit 5;
            +---------+------------+--------------+---------+
            bereich zeit       ip           sprache |
            +---------+------------+--------------+---------+
            Andere  1095545184 192.168.1.34 de      |
            Andere  1095545185 192.168.1.34 de      |
            Andere  1095545185 192.168.1.34 de      |
            Andere  1095545175 192.168.1.35 de      |
            Andere  1095545195 192.168.1.35 de      |
            +---------+------------+--------------+---------+
            5 rows in set (0,50 sec
            Wenn ich das Ergebnis (ohne die LIMIT-Anweisung natürlich, das hab ich jetzt nur gemacht, weil derzeit 15600 Datensätze existieren) jetzt so hole könnte ich doch das ganze mit PHP so auslesen, dass in jedem Schleifendurchlauf gefragt wird, ob der vorherige Datensatz die selbe IP, den selben Bereich hatte und die Zeitdifferenz nicht mehr als ein von mir bestimmter Wert beträgt - wenn das der Fall ist wird nicht inkrementiert, in anderen Fällen schon.

            Das ist immerhin schneller als über den SQL-Weg...

            Kommentar

            Lädt...
            X