Ankündigung

Einklappen
Keine Ankündigung bisher.

Daten von SUM() und GROUP BY abgreifen?

Einklappen

Neue Werbung 2019

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

  • Daten von SUM() und GROUP BY abgreifen?

    Nabend zusammen,

    ich habe hier eine Tabelle, in der verschiedene Beträge gespeichert sind, die gleichzeitig bestimmten Kategorien zugeordnet sind. Per SUM() lasse ich die Beträge zusammenrechnen und diese per GROUP BY für die einzelnen Kategorien zusammenfassen und ausgeben. Die Namen der Kategorien werden aus einer anderen Tabelle hinzugezogen:

    PHP-Code:
    $mysqli_abfrage "SELECT
                                SUM(verkauf.verkauf_betrag) AS ausgaben_gesamt,
                                verkauf.verkauf_kategorien_id,
                                verkauf_kategorien.verkauf_kategorien_id,
                                verkauf_kategorien.verkauf_kategorien_name
                            FROM
                                verkauf
                            INNER JOIN verkauf_kategorien ON verkauf.verkauf_kategorien_id = verkauf_kategorien.verkauf_kategorien_id
                            WHERE
                                YEAR(verkauf_datum)= ? AND MONTH(verkauf_datum) = ?
                            GROUP BY
                                verkauf_kategorien.verkauf_kategorien_name
                            ORDER BY
                                verkauf.verkauf_kategorien_id"
    ;

                            if(
    $mysqli_ergebnis $mysqli_verbindung->execute_query($mysqli_abfrage, [$zeitraum[0], $zeitraum[1]]))
                            {
                              
    AUSGABE
                           

    Ich würde jetzt die einzelnen verkauf_kategorien_name und ausgaben_gesamt für ein Diagramm weiternutzen. Damit ich die DB-Abfrage nicht noch einmal starten muss, war meine Idee, diese inein Array zu schreiben und an entsprechender Stelle wieder abzurufen. Aber das funktioniert irgendwie nicht.

    Ich habe das Feld mit
    PHP-Code:
    $kategorien_betrag = array(); 
    initiiert und wollte es dann in der Ausgabe mit

    PHP-Code:
    $kategorien_betrag = [$datensatz["verkauf_kategorien_name"] => $datensatz["ausgaben_gesamt"]]; 
    in das Feld schreiben. Nur wird irgendwie immer nur der letzte Eintrag eingetragen. Zumindest wird nur der bei einer Testausgabe via

    PHP-Code:
    foreach($kategorien_betrag AS $kategorien_betrag_name => $kategorien_betrag_wert)
    {
           echo 
    "" $kategorien_betrag_name " --- " $kategorien_betrag_wert "<br>";

    so ausgegeben. Es kann also sein, dass die davor immer gelöscht werden. Count() gibt ebenso nur ein Feld aus.

    Daher direkt zwei Fragen: Ist der Grundgedanke zumnindest nicht verkehrt und wo könnte der Fehler liegen?

  • #2
    Ok, in der Zwischenzeit habe ich es per

    PHP-Code:
    $kategorien_betrag[$datensatz["verkauf_kategorien_name"]] = $datensatz["ausgaben_gesamt_gross"]; 
    lösen können. Es funktioniert zumindest...

    Kommentar


    • #3
      Zitat von Lapje Beitrag anzeigen
      Ok, in der Zwischenzeit habe ich es per […] lösen können. Es funktioniert zumindest...
      Klar, damit setzt du ja mit jedem Schleifendurchlauf ein neues Arrayelement, der Code aus #1 dagegen überschreibt die Variable bei jedem Durchlauf mit einem Wert - allerdings wird der Code aus #2 nicht funktionieren da es in dem Query keine Spalte ausgaben_gesamt_gross gibt …

      Das ganze geht aber ohnehin viel einfacher: wenn man sich nicht mit MySQLi quält sondern PDO verwendet, kann man die Daten mit fetchAll() holen und dabei als Parameter PDO::FETCH_KEY_PAIR verwenden - die Rückgabe ist dann ein Array mit der ersten Spalte als Key und der zweiten als Wert. Voraussetzung ist allerdings dass du nicht die vier Spalten aus #1 holst sondern nur die beiden benötigten (und hier auch die Summe als zweite Spalte) - so ist der Query allerdings ohnehin falsch: es muss nach allen Spalten gruppiert werden die nicht in einer Gruppenfunktion (hier: SUM()) stehen.

      Kommentar

      Lädt...
      X