Tabelle gruppieren und sortieren
elf7013
- datenbank
Hallo,
Hallo,
in einer Tabelle habe ich Webserverlogdaten eingelesen:
log (
id
ip
timestamp
datetime
date
time
...
)
Ich möchte nun die Daten so auslesen, dass die Tabelle nach der "ip" gruppiert ist und innerhalb der Gruppe anhand der Zeit (zB timestamp) sortiert ist.
Dies soll im Weiteren dazu genutzt werden, klassisch die Verweildauer eines Besuches zu bestimmen, welche ich anschliessend noch in einem Skript weiterverarbeiten möchte.
Ich hatte es mit:
SELECT * FROM log
GROUP BY ip
ORDER BY timestamp
versucht.
Vielleicht kann mir jemand bei der Formulierung des Statments helfen?
Danke!
Hello,
innerhalb der Gruppe anhand der Zeit (zB timestamp) sortiert ist.
OK
Ich möchte nun die Daten so auslesen, dass die Tabelle nach der "ip" gruppiert ist
das wiederum kann ich mir schwer vorstellen, weil...
SELECT * FROM
log
GROUP BYip
ORDER BYtimestamp
was ist deiner Meinung nach der korrekte Wert für ID? Wenn du GROUP BY "ip" absetzt, erscheinen (theoretisch) alle Datensätze mit der selben IP als ein Datensatz. Damit besteht ein Konflikt bei allen nicht-gruppierten Spalten (ID, date, time, timestamp, ...) - die Werte werden sich ja für jeden Eintrag unterscheiden - welchen Wert davon hättest du gerne?
Vielleicht erleichtert es die Lösungsfindung, wenn du Beispieldaten und gewünschtes Ergebnis nennst, dann wirst du dir auch selber darüber klar, welche Daten du brauchst.
MfG
Rouven
OK.
Versuchen wir das ganze mit Beispieldaten:
Hier der Einfachheit mit nur zwei Spalten
IP------------------------timestamp
100.100.100.100-----------1
100.100.100.100-----------2
100.100.100.100-----------3
100.100.100.0-------------1
100.100.100.100-----------4
100.100.100.0-------------1
100.100.100.100-----------6
100.100.100.0-------------1
100.100.100.0-------------10
100.100.100.0-------------4
100.100.100.0-------------7
100.100.100.0-------------5
Ergebnis
100.100.100.0-------------1
100.100.100.0-------------1
100.100.100.0-------------4
100.100.100.0-------------5
100.100.100.0-------------7
100.100.100.0-------------10
100.100.100.100-----------1
100.100.100.100-----------2
100.100.100.100-----------3
100.100.100.100-----------4
100.100.100.100-----------6
Das Ergebnis ist also eine sortierte Liste sowohl nach unterschiedlichen IPs und der Zeit. Die Einträge der verschiedenen IPs werden also chronologisch (auf oder absteigend sortiert) ausgegeben.
Ergebnis
100.100.100.0-------------1
100.100.100.0-------------1
100.100.100.0-------------4
100.100.100.0-------------5
100.100.100.0-------------7
100.100.100.0-------------10
100.100.100.100-----------1
100.100.100.100-----------2
100.100.100.100-----------3
100.100.100.100-----------4
100.100.100.100-----------6
Das ist dann aber bei der IP kein Group By sondern auch ein Order By.
Group By würde alle 100.100.100.0 zusammenfassen zu einem was sich dann (wie Rouven auch schon gesagt hat) mit der sortierung der id nicht vertragen würde
gruß miku
Das ist dann aber bei der IP kein Group By sondern auch ein Order By.
Dementsprechend sollte ich folgendes probieren (wenn das Interface wieder funktioniert...)?
SELECT * FROM log
ORDER BY ip
, timestamp
Das ist dann aber bei der IP kein Group By sondern auch ein Order By.
Dementsprechend sollte ich folgendes probieren (wenn das Interface wieder funktioniert...)?
SELECT * FROMlog
ORDER BYip
,timestamp
So würd ichs mal probieren.
Hier findest du das auch schön erklärt mit Beispielen
gruß miku
Das ist dann aber bei der IP kein Group By sondern auch ein Order By.
Dementsprechend sollte ich folgendes probieren (wenn das Interface wieder funktioniert...)?
SELECT * FROMlog
ORDER BYip
,timestamp
So würd ichs mal probieren.
Hier findest du das auch schön erklärt mit Beispielengruß miku
Die Seite erklärt leider nur den simplen Syntax. Sucht man aber im Netz finden sich in der Tat Beispiele für mehrere Angaben im Rahmen des ORDER BY Statements.
Die Seite erklärt leider nur den simplen Syntax. Sucht man aber im Netz finden sich in der Tat Beispiele für mehrere Angaben im Rahmen des ORDER BY Statements.
Steht aber genau das Beispiel drin das du laut deinem Befehl auch suchst ;)
(Ja, ist aber eher kurz zusammengefasst, das stimmt)
Zitat:
Es besteht die Möglichkeit, nach mehr als einer Spalte zu sortieren. In diesem Fall sieht die ORDER BY-Klausel wie folgt aus:
ORDER BY "Spalten_Name1" [ASC, DESC], "Spalten_Name2" [ASC, DESC]
gruß
echo $begrüßung;
Das ist dann aber bei der IP kein Group By sondern auch ein Order By.
Dementsprechend sollte ich folgendes probieren (wenn das Interface wieder funktioniert...)?
SELECT * FROMlog
ORDER BYip
,timestamp
Auch solltest du dir die Funktion INET_ATON() ansehen, damit du deine IP-Adressen nummerisch und nicht nach String sortieren kannst.
echo "$verabschiedung $name";