tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
530
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Apr 2002
    Ort
    München
    Beiträge
    151
    Hi,
    ich habe eine MySQL Tabelle in der Logdaten gespeichert werden. Bei jedem Seitenaufruf auf meiner HP werden vom User die IP, die Zeit (als Linux-Timestamp) und die aktuelle Seite gespeichert. Jetzt will ich eine Online-Fuktionalität aufbauen und dazu wissen wo sich der User gerade befindet, ich will also mit einem SELECT-Befehl alle IP'S der letzten 3 Minuten mit den dazugehörigen Seiten und Zeiten. Also wenn die IP 172.123.45.32 vier Einträge in den letzten 3 Minuten hat, will ich nur den letzten und das von allen IP's die in den letzten 3 Minuten was gemacht haben.

    Die Tabelle heißt : logs und die Felder: IP, Seite, Zeit

    Kann mir jemand das zugehörige SELECT austüffteln?

    Danke und Gruß
    Major
     

  2. #2
    cplume cplume ist offline Mitglied Bronze
    Registriert seit
    Mar 2004
    Beiträge
    48
    versuche es mal mit

    SELECT * FROM logs WHERE (Zeit-3Min) GROUP BY IP

    (Zeit-3Min) musst Du noch auf den Linuxtimestamp anpassen. Ist das nicht möglich, füge noch ein Feld time mit getdate() ein und werte diese aus.

    so long
    CP
     

  3. #3
    Registriert seit
    Apr 2002
    Ort
    München
    Beiträge
    151
    Hi,

    leider bekomme ich damit noch nicht das richtige Ergebnis, weil ich will ja nicht die Einträge vor genau 3 Minuten sondern alle seit 3 Minuten (Zeit > (timestamp-180)) und davon nur die neuesten. Wenn ich die Abfrage so mache:

    SELECT * FROM logs WHERE Zeit > (timestamp-3Min) GROUP BY IP

    bekomme ich zwar die IP's, aber nicht die richtige (letzte) Zeit dazu.

    Gruß
    Major
     

  4. #4
    Registriert seit
    Mar 2004
    Ort
    Tiefste Provinz
    Beiträge
    304
    Hallo,
    das Problem hört sich einfach an, es ist aber recht tricky, den Feldinhalt eines bestimmten Datensatzes aus einer GROUP BY-Gruppe auszuspucken. Man muss MySQL ziemlich austricksen. Das könnte vielleicht so funktionieren:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    SELECT
     ip,
     SUBSTRING(MAX(CONCAT(RPAD(zeit, 12, ' '), seite)) ,13) AS seite,
     MAX(zeit) AS zeit
    FROM
      logs
    WHERE
      zeit >= DATE_SUB(NOW(), INTERVAL 3 MINUTE)
    GROUP BY
      ip
    Ist ein wildes Konstrukt. Die Formel verkettet den Timestamp mit der Spalte die ausgelesen werden soll, liefert den höchsten Wert dieser Verkettung und kappt dann den Timestamp wieder weg.

    Vielleicht hilft's ja.

    Grüße,
    Martin
    Geändert von Resalb (01.04.04 um 22:12 Uhr)
     

  5. #5
    Registriert seit
    Apr 2002
    Ort
    München
    Beiträge
    151
    Danke Dir Martin,

    genau das war es, ist echt tricky
    Ich hatte schon einen halben Tag damit verbracht, bis ich mich an die Foren wandte. Also nochmals herzlichen Dank und ein Bienchen an Dich.

    Gruß
    Major
     

Ähnliche Themen

  1. Hilfe bei Select
    Von Flashii123 im Forum PHP
    Antworten: 2
    Letzter Beitrag: 29.12.08, 15:20
  2. hilfe bei select
    Von tombo82 im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 09.10.07, 10:29
  3. Hilfe bei MySQL Select mit VBS
    Von BadMimi im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 15.08.07, 17:01
  4. Hilfe zu SELECT abfrage
    Von supersalzi im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 16.09.05, 19:13
  5. Bräuchte Hilfe bei select sum()
    Von splatterman im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 19.07.02, 20:10