1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Blockweise zusammenfassen mehrerer Einträge aus einer Tabelle

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von michaldo, 29 Februar 2012.

  1. michaldo

    michaldo Benutzer

    Ich habe ein Problem dessen Lösung mir jetzt schon mehr als eine Woche nicht gelingt.
    In einer Tabelle habe ich die Zeiten von Logins die als datetime gespeichert wurden stehen.
    Es kommt vor das sich Besucher mehrermals am Tag einloggen.
    Aus den erhaltenen Daten möchte ich die Loginzeiten gestaffelt nach Tagen ausgeben d.h. die Loginzeiten aller die sich an einem bestimmten Tag eingeloggt haben sollen nacheinander angezeigt werden und erst dann die des nächsten Tages. Die Abfrage muss auch noch die Begrenzung "von Datum" und "bis Datum" haben die ich aber schon mit BETWEEN gelöst habe.

    Ich habe die Daten nach dem MySQL select als eindimensionales Array vorliegen und gebe diese in php mit einer foreach aus.
    Dabei wird natürlich jeder Login einzeln ausgegeben.

    Bisher sieht meine Abfrage so aus:
    Code:
    SELECT * FROM `$besucher` LEFT JOIN `$thisYearDB` ON ($thisYearDB.be_id=$besucher.id) WHERE be_id = '$id' AND login BETWEEN '$from' AND '$to'
    Gibt es eine Möglichkeit die Daten mit Mysql zusätzlich zu der BETWEEN so zu selectieren das die Daten in Gruppen nach dem Login Zeitpunkt zusammengefasst werden können, wobei nur nach dem Tag und Monat aus dem datetime Eintrag geprüft werden sollte. Dann könnte man jede selektierte Gruppe in ein eigenes Subarray schreiben und per php leicht gruppiert wieder ausgeben. Jeder einzelne Login muss jedenfalls erhalten bleiben und ausgegben werden können. Ich brauche zur Prüfung um welchen Tag es sich handelt nur den Tag und das Monat weil die DB am Jahresende jeweils wieder geleert wird.

    Die mysql Version is 5.irgendwas. Wer kann mir da helfen?
     
  2. ukulele

    ukulele Datenbank-Guru

    Also wenn ich dich richtig verstehe hast du Daten wie z.B.:

    2012-03-01 01:00:00:000 login User A
    2012-03-01 02:00:00:000 login User A
    2012-03-01 03:00:00:000 login User B
    2012-03-02 01:00:00:000 login User B

    und möchtest sie so ausgeben:

    2012-03-01 01:00:00:000 login User A, 02:00:00:000 login User A, 03:00:00:000 login User B
    2012-03-02 01:00:00:000 login User B

    oder verstehe ich das falsch? Nach Datum zu sortieren wäre einfacher, dann meinst du vieleicht so etwas wie:
    Code:
    SELECT * FROM tabelle ORDER BY year(login),month(login),day(login),user,login
     
  3. michaldo

    michaldo Benutzer

    Ja danke ululele das war es wohl. Ich muss das jetzt noch testen aber das sieht schon gut aus.
    Die Idee war alle Loginzeiten und Logoutzeiten von einem Tag zusammengefasst darzustellen und erst danach die vom nächsten Tag usw egal wer sich eingeloggt hatte.
    Der Ausgangspunkt ist aber die Zeit des Logins.
    Sollte ich doch nicht zurechtkommen melde ich mich nochmal. Vielen Dank jetzt erst mal, auch für die rasche und einfach zu verstehende Erklärung.
     
  4. ukulele

    ukulele Datenbank-Guru

    Einfach nur nach login zu sortieren wäre dann ORDER BY login
     
  5. michaldo

    michaldo Benutzer

    Echt stark von dir ukulele, danke. Ich kannte die Möglichkeit auf Daten von datetime Feldern mit year month und day zugreifen zu können noch nicht. Das hat es voll gebracht. Die Daten sind jetzt alle wunderbar zusammengefasst. Danke nochmals, ich werde mich vertrauensvoll beim nächsten Problem wieder hier melden.
     

Diese Seite empfehlen