Ankündigung

Einklappen
Keine Ankündigung bisher.

Datensätze sortiert nach Jahr ausgeben

Einklappen

Neue Werbung 2019

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

  • Datensätze sortiert nach Jahr ausgeben

    Hallo zusammen,

    ich habe in meiner SQL Datenbank ein Feld time mit dem Timestamp des Eintrags.

    Ich suche nun eine SQL Abfrage, die mir alle Datensätze pro Jahr (Jahr im Timestamp) anzeigt.
    Leider komme ich hier nicht weiter.

    Zurzeit werden mir alle Einträge, sortiert nach dem Datum angezeigt. Das klappt schon gut.
    Code:

    SELECT * FROM testtabelle ORDER BY time
    Die Ausgabe soll dann in etwa so aussehen:

    2022

    Eintrag 1
    Eintrag 2
    ...

    2021

    Eintrag 1
    Eintrag 2
    ...

    Hat jemand eine Idee für mein Problem?

  • #2
    Gruppenbruch:

    https://php-de.github.io/jumpto/gruppenbruch/

    Kommentar


    • #3
      PDO::FETCH_GROUP als Parameter von fetchAll hilft auch die Daten zu gruppieren.

      Kommentar


      • #4
        Danke für die Antworten.
        Könntet Ihr mir ein Codebeispiel geben, wie die Abfrage aussehen muss?

        Kommentar


        • #5
          Zitat von davidlohmann Beitrag anzeigen
          Könntet Ihr mir ein Codebeispiel geben, wie die Abfrage aussehen muss?
          Nein. Die Informationen zu Code zu verarbeiten ist deine Aufgabe, wenn es nicht klappt dann gerne den Versuch posten - aber ein "Codebeispiel" was bei der trivialen Aufgabe eine fertige Lösung wäre, ist nicht. Einen Tipp noch: um das Jahr zu bekommen hilft (wenig überraschend) die Funktion YEAR(), wenn du die als erste Spalte ins SELECT schreibst und mit Hilfe der in #3 genannten Konstante die Daten abrufst bekommst du pro Jahr ein Array im Array (einfach mal mit print_r/var_dump das Ergebnisarray ausgeben lassen). Und: niemals »SELECT *« verwenden, immer die benötigten Spalten angeben.

          Kommentar


          • #6
            Ich weiß leider nicht, wo ich PDO::FETCH_GROUP einfügen soll.
            Meine Abfrage sieht bis jetzt so aus:
            SELECT time FROM testtabelle GROUP by YEAR(time) ORDER BY time

            Kommentar


            • #7
              Lies doch einfach den in #2 verlinkten Artikel und dort Beispiel 4b.

              Kommentar


              • #8
                Zitat von davidlohmann Beitrag anzeigen
                Ich weiß leider nicht, wo ich PDO::FETCH_GROUP einfügen soll.
                Das schrieb ich doch (mit Link zur Doku!): als Parameter von fetchAll. Das gehört dann natürlich nicht mehr zur Datenbankabfrage sondern zu dem Code der die Daten aus der Datenbank abholt - das gewünschte Format lässt sich direkt in der Datenbank aber auch nicht darstellen.

                Meine Abfrage sieht bis jetzt so aus:
                SELECT time FROM testtabelle GROUP by YEAR(time) ORDER BY time
                kein GROUP BY. Du möchtest ja nicht einen Datensatz pro Jahr sondern alle zu einem Jahr. Wie oben schon geschrieben: das YEAR gehört als erste Spalte in die Abfrage, dann alle Werte die du zu jedem Eintrag brauchst.

                Kommentar


                • #9
                  Zitat von tk1234 Beitrag anzeigen
                  Das schrieb ich doch (mit Link zur Doku!): als Parameter von fetchAll. Das gehört dann natürlich nicht mehr zur Datenbankabfrage sondern zu dem Code der die Daten aus der Datenbank abholt - das gewünschte Format lässt sich direkt in der Datenbank aber auch nicht darstellen.
                  Die einzelnen Jahre lasse ich mir dann mit einer while-Schleife wahrscheinlich ausgeben, oder?

                  Die Abfrage müsste dann in etwa so aussehen?
                  SELECT YEAR(time) FROM testtabelle;

                  Kommentar

                  Lädt...
                  X