2017-05-23 6 views
0

Ich versuche, eine Gesamtsumme einer Gruppe in AngularJS zu erstellen. Ich bin mit http die Ergebnisse in eine HTML-Tabelle zu erhalten:AngularJS gruppieren Werte und addieren sie zusammen in ng-repeat

$http({method: 'GET', url: urlpurchasing}).success(function(data) { 

       $scope.purchasing = data; 

      }) 

Welche das unten stehende Ergebnis liefert: enter image description here

Ich möchte eine neue Spalte „Gesamtbestand“ genannt machen, und fügen Sie alle die "Menge verkauft" für jede Gruppe, also für alle, die eine Beschreibung des gleichen Wertes haben, möchte ich dort "verkaufte Menge" addieren. Zum Beispiel würden die 3 violetten Reihen unten "607" in der Spalte "total sale" haben.

Ich habe versucht, die Daten mit einem Winkel for-each zu durchlaufen und fügen Sie jedes nach oben, aber dies beinhaltet ein zweites Array erstellen und jede Art von Filter oder Änderung in der Haupttabelle ändert die Indizes und es vermischt sich. Schätze jede Hilfe.

bearbeiten

Dies ist, was ich bisher haben (aber die Summen jedes Mal erhöht wird:

$http({method: 'GET', url: urlpurchasing}).success(function(data) { 


           var t = 0; 

           angular.forEach(data, function(obj){ 


            if($scope.code == obj.GroupCode){ 

             } 
             else 
             { 
             $scope.code = obj.GroupCode; 
             t = 0; 

             } 

            t = (t + parseInt(obj.QuantitySold)); 
            obj.total = t; 


            }); 

            $scope.purchasing = data; 


        }) 

Hier ist die PHP:

<?php 

require_once('sqlconnect.php'); 
$sqlQuery = "select StockCode,Description,QuantityInStock,QuantitySold,NetAmountSold,GroupCode,color from purchasing order by Description desc"; 
$result = $unity_connection->query($sqlQuery); 

$json1 = array(); 
while($rows = mysqli_fetch_assoc($result)){ 
    $json1[] = $rows; 
} 

    echo json_encode($json1); 

?> 
+0

Haben Sie die Kontrolle über das Backend? Wenn das der Fall ist, würde ich die Datenbank die Arbeit erledigen lassen, anstatt irgendeine Art von clientseitiger Schleife zu machen. –

+0

Ja, aber es ist für eine visuelle Aktienrepräsentation und der Benutzer kann die Werte ändern, ID muss jede Zeile in der Datenbank für jede Änderung aktualisieren, so entschied ich mich dagegen –

+0

Ähm, ich würde annehmen, dass die Datenbank Berechnungen als Teil tun kann der Abfrage. Welche Datenbank verwendest du? –

Antwort

1

Ich benutze MySQL nicht, aber Standard-SQL den Trick tun sollten: auch

SELECT 
    purchasing.stockcode, 
    purchasing.description, 
    purchasing.quantityinstock, 
    purchasing.quantitysold, 
    purchasing.netamountsold, 
    purchasing.groupcode, 
    purchasing.color, 
    desc_summary.totalstock 
FROM 
    purchasing join (select description, sum(quantitysold) as TotalStock from purchasing group by descrption) desc_summary on purchasing.description = desc_summary.description 
ORDER BY purchasing.description DESC 
+1

Danke :) funktioniert gut. –

0

Sie dies erreichen können auf verschiedene Arten, entweder um zusätzliche Variable für total in Ihrem controller scope oder direkt in Ihremzu erstellenauch. Oder durch $scope.purchansing

erweitern oder, wenn Sie keine weiteren $scope Eigenschaft wünschen, dann können Sie eine Funktion zur Laufzeit aufrufen, um die total for each group. zu berechnen.

Sehen Sie diese fiddle in denen ich mit Laufzeitfunktion versucht, die für die Gruppe insgesamt pro Gruppe überprüft.

Aktualisiertfiddle, um Ihre Scope-Daten im Controller zu erweitern.

+0

Ich kann es so nicht tun, ich habe rund 500 Zeilen im Datenobjekt es stürzt einfach ab –

+0

Wie ich in der Antwort erwähnt, können Sie auch '$ scope.purchansing' erweitern, während Daten innerhalb' .success' abgerufen werden, und ein anderes erstellen Eigenschaft 'groupTotalSold' – anoop

+0

Hallo, ich habe das versucht, aber die Werte nur inkrementieren (zB 60, 120, 150, 270 usw.) –

Verwandte Themen