Hi!
Ich suche alle Datensätze:
- eines Users mit dem Namen 'XYZ'
- ohne das die Datumsspalte den ersten Eintrag des Tages zeigt
- mit Seite 'test.php'
- ohne Seite 'trallala.php' des vorherigen Datensatzes dieses Users
- mit Zeitdifferenz des aktuellen zum vorhergehenden Datensatzes von mehr als 1 Std.
Fehlt da als Kriterium noch, dass nur ein einzelner Tag gewünscht ist? Und wie muss ich "ohne Seite 'trallala.php' des vorherigen Datensatzes dieses Users" deuten?
Schön wäre, den Usernamen, das Datum und die Zeitdifferenz zum Vordatensatz als Ergebnis zu bekommen.
Der vorhergehende Datensatz lässt sich nicht einfach ermitteln. Zunächst erst einmal wäre zu klären, wie du "vorhergehenden Datensatz" definierst. Ist es der mit der mit dem größten Zeitwert aus der Menge derer, deren Zeitwert kleiner als der vom aktuellen Datensatz ist? Oder das selbe Prinzip aber mit der ID - wobei anzumerken ist, dass die ID üblicherweise nicht die Aufgabe hat, eine Reihenfolge sicherzustellen sondern nur eine eindeutige Identifikation. Deshalb sollte man auch nicht davon ausgehen, dass Zahlenwerte als ID lückenlos vorhanden sind. Sonst müsste man einfach nur aktuelle ID minus Eins nehmen.
Geht das in einer Query oder sollte ich mir das lieber in php selber zusammenbasteln
Der vorhergehende sollte sich mit einer Subquery ermitteln lassen. Wobei es da doch eine Einschränkung gab, dass MySQL LIMIT in einer Subquery nicht oder zumindest nicht in alle Fällen unterstützt, wenn ich mich recht erinnere. Aber Lösungen für "vorhergehenden Datensatz" gibt es schon im hiesigen Archiv. Du kannst ja mal schauen, ob du da was passendes findest.
Wenn du nur einen Tag abfragst und den ersten Eintrag des Tages nicht willst, kannst du den ja mit LIMIT überspringen. Wenn es mehrere Tage sind, fällt mir keine Lösung ein, wie man den jeweils gleich beim Abfragen von der Selektion ausschließen kann (jedenfalls nicht ohne den Aufwand einer Stored Procedure).
Das Kriterium "von mehr als einer Stunde" müsste meines Erachtens in einer HAVING-Klausel abgearbeitet werden. Die Subquery für den vorhergehenden Datensatz steht ja in der SELECT-Klausel und die wird erst nach dem WHERE ausgewertet. Also kann im WHERE kein Kriterium stehen, das erst danach berechnet wird. Oder aber, dich interessiert der Wert der Zeitdifferenz nicht, dann kannst du die Subquery in der WHERE-Klausel unterbingen.
Lo!