Array gruppierte Summierung

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

  • Array gruppierte Summierung

    Hallo zusammen!

    Als Neuling in Sachen PHP tu ich mir da etwas schwer - also bitte nicht mit Steinen werfen ;-)

    Ich habe ein Script bekommen, das etwas ergänzt gehört.

    Werte werden aus einer DB allerdings aus verschiedenen Tabellen ausgelesen
    While Schleife
    Artikelnummer wird hier gespeichert: $data[$zaehler]['ArtikelNr'];
    Mengen zu der Artikelnummer hier: $data[$zaehler]['Menge'];

    Artikel und Menge wird einzeln ausgegeben - kein Problem.

    Die Ausgabe sieht in etwas so aus:
    Artikel 1 = 50
    Artikel 1 = 100
    Artikel 1 = 80
    Artikel 4 = 50
    Artikel 4 = 110
    Artikel 8 = 22
    Artikel 9 = 55
    Artikel 9 = 25
    usw.

    Wie stelle ich es am besten an, das das Ergebnis wie folgt aussieht:
    Artikel 1 = 230
    Artikel 4 = 160
    Artikel 8 = 22
    Artikel 9 = 80
    (ergo Artikel zusammengefasst und jeweil summiert)

    Meine Überlegung war, alles bei jedem Schleifendurchlauf in Array zu packen, und dann irgendwie auszulesen. Nur die Frage wie...
    Oder bin ich da vollkommen auf dem Holzweg?

    thx vorab

  • #2
    Zeig doch mal deinen Query und wie du ihn aufrufst.

    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Hallo,

      probier mal sowas in der Art von

      Code:
      SELECT
          ArtikelNr,
         [COLOR="Blue"] sum(Menge)[/COLOR] as Menge
      FROM tabelle
      [COLOR="Blue"]GROUP BY ArtikelNr[/COLOR]
      Gruß,

      Amica
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #4
        Query

        Die Query möchte ich an sich nicht verändern, da sie woanders noch verwendet wird. Meine Überlegung war, das die Daten schon in einem Array sind, und man sie dadurch weiterverwenden kann.

        $table wird durch eine andere Abfrage aus einem SQL-Statement gefüllt. das from läuft durch mehrer Tabellen - kommt auf das gewählte Datum an - aber mindestens durch 3.
        Query:
        $query = " select '$typ' as typ, ArtikelNr, KundenNr, Menge, RegisNr, WarenBezeichnung,Betrag, Datum, time(Zeit) as Zeit from `$table`
        where ....

        Die Abfrage - allerdins nur Auszugsweise, da aus den Arrays XML-Felder gefüllt werden:

        function fuellexml($title, $data) {
        $anzahl = count($data);
        $zaehler = 0;
        if (!$data) {
        $anzahl = 0;
        }
        while ($zaehler < $anzahl) {
        $row = $xml->createElement("row");
        ...
        $cell4 = $xml->createElement("cell");
        $number = number_format($data[$zaehler]['Menge'], 2, '.', '');
        $cell4->appendChild($xml->createTextNode($number));
        $row->appendChild($cell4);
        $mengensumme = $mengensumme + $data[$zaehler]['Menge'];
        // In der $mengensumme wird summiert - diese Variable verwende ich nicht da immer mehrere Artikel vorhanden sind
        //Im folgenden wird Gesamtsumme erzeugt - aber nicht Artikelbezogen
        $zaehler = $zaehler + 1;
        }
        return ($xml);
        }

        thx für de hilfe

        lg

        Kommentar


        • #5
          Dann bau dir einen neuen Query. Alternativ könntest du dir auch was zusammenpfuschen:
          PHP-Code:
          foreach ($article as $key => $value) {
            
          $sort_article[$key][] = $value;

          Dann hast du alle Einträge pro Artikel. Und die verabeitest du dann:
          PHP-Code:
          foreach ($sort_article as $key => $value) {
            
          $sum_article[$key] = 0;
            for (
          $i 0$i count($value); $i++) {
              
          $sum_article[$key] += $value[$i];
            }

          Ungetestet und auf die Schnelle zusammengehauen. Außerdem komme ich gerade aus "Iron Sky" und bin noch ein wenig matschig in der Birne.

          Peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            anderen Ansatz

            Hallo!

            ich habe einen anderen Ansatz gefunden - relativ trivial ;-) :

            foreach ($data as $value ) {
            $summe_menge[$value['WarenBezeichnung']] += $value['Menge'];
            $summe_betragts[$value['WarenBezeichnung']] += $value['betragts'] ;
            }

            Allerdings ergibt sich danach ein Folgeproblem, da ich nur vom ersten Array (menge) den key benötige - bei den nachfolgenden allerdings die values. Mit foreach spielts die Ausgabe nicht.
            Habe es hiermit gelöst:

            while(1){
            list($key1,$val1) = each($summe_menge);
            list($key2,$val2) = each($summe_betragts);
            list($key3,$val3) = each($summe_betrag1);
            list($key4,$val4) = each($summe_betrag2);
            if(!$key1 || !$key2 || !$key3 || !$key4 ) break;

            //Zellen befuellen
            echo '<tr>';
            echo '<td>' . $key1 . '</td>';
            echo '<td>' . $val1 . '</td>';
            echo '<td>' . $val2 . '</td>';
            echo '<td>' . $val3 . '</td>';
            ....

            lg

            Kommentar

            Lädt...
            X