Ussel: Abfrage-Schleife => Sortierung

Hallo Gemeinde,

ich suche nach einer Lösung für eine Datenbankabfrage bzw Ausgabe.
Ich habe folgende Spalten in meiner DB:

user-id | monat | jahr | hit

Zur Zeit frage ich die letzten 12 Einträge ab und gebe diese in einer Schleife aus.
Es sollen aber nicht die letzten 12 Einträge sondern die letzten 12 Monate angezeigt werden-auch wenn in einem Monat keine Hits gezählt wurden und demnach kein Eintrag vorhanden ist.

Ausgabe Aktuell:
02.2010: 458
01.2010: 651
12.2009: 45
11.2009: 87 // Hier fehlt der Monat ohne Hits
09.2009: 156
07.2009: 65 // Hier fehlt der Monat ohne Hits
...

Gewünschte Ausgabe:
02.2010: 458
01.2010: 651
12.2009: 45
11.2009: 87
10.2009: 0
09.2009: 156
08.2009: 0
07.2009: 65
...

Es wäre doch ziemlich sinnfrei 12 mal ein select zu machen mit dem entsprechenden Monat und Jahr.

Hoffe mir kann wer helfen.

Ussel

  1. Hi,

    Zur Zeit frage ich die letzten 12 Einträge ab und gebe diese in einer Schleife aus.
    Es sollen aber nicht die letzten 12 Einträge sondern die letzten 12 Monate angezeigt werden-auch wenn in einem Monat keine Hits gezählt wurden und demnach kein Eintrag vorhanden ist.

    Daten zu selektieren, die nicht vorhanden sind, ist immer schwierig. (Nicht unmöglich, aber nur auf Umwegen erreichbar.)

    Sehr viel einfacher machst du es dir, wenn du nur die Datensätze der letzten 12 Monate selektierst, die vorhanden sind - und das ganze dann bei der (scriptseitigen) Ausgabe mit einer Schleife entsprechend „auffüllst“.

    Es wäre doch ziemlich sinnfrei 12 mal ein select zu machen mit dem entsprechenden Monat und Jahr.

    Einzelne SELECT-Statements wären sowieso ziemlich sinnfrei.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. Hallo,

      erstmal vielen Dank für die schnelle Antwort.
      Mein Problem ist ja "wie fülle ich es auf"?

      In PHP die letzten 12 Monate bestimmen ist ja kein Hexenwerk - aber beim Auffüllen hänge ich...

      Hast du einen Ansatz für mich?

      Ussel

      1. Hi,

        In PHP die letzten 12 Monate bestimmen ist ja kein Hexenwerk - aber beim Auffüllen hänge ich...

        Hast du einen Ansatz für mich?

        Werte aus Abfrage in Array packen, Kombination Jahr-Monat o.ä. als Schlüssel.
        Schleife über 12 Monate - wenn Wert aus Abfrage vorhanden, dann den ausgeben, sonst 0.

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
        1. Klingt logisch-ich setze mich mal dran.
          Vielen Dank schon einmal!

          Ussel

  2. Hi!

    Es sollen aber nicht die letzten 12 Einträge sondern die letzten 12 Monate angezeigt werden-auch wenn in einem Monat keine Hits gezählt wurden und demnach kein Eintrag vorhanden ist.

    Ein DBMS gibt nur die Daten zurück, die vorhanden sind. Wenn in deinem Fall ein Monat keine Daten hat, gibt es dafür keinen Ergebnisdatensatz.

    Zwei alternative Lösungsvorschläge:

    In der abfragenden Umgebung erzeugst du dir zunächst ein Array mit so vielen Feldern, wie Ergebniszeilen gewünscht sind. Die Schlüssel sind bei dir die Monate und die Werte sind mit 0 vorbelegt. Beim Fetchen schreibst du das Ergebnis in das jeweilige Array-Element. Zur Ausgabe durchläufst du dieses Array und hast dann entweder das Ergebnis der Abfrage oder die 0.

    Du erzeugst eine (temporäre) Tabelle mit den Werten 1 bis 12, dann kannst du deine Datentabelle daran mit einem Left Join anbinden. Somit erhältst du Ergebnisse oder NULL-Werte.

    Lo!