2016-07-27 9 views
2

Könnten Sie mir helfen? Wenn Sie eine Antwort mit einer Erklärung geben können, werde ich dankbarer sein, weil ich mehr lernen möchte, bin ich bereits dankbar für diese Gemeinschaft. Hilft mir sehr beim Lernen. Aber nur die Antwort ist gut genug für mich, da ich wirklich den Code dafür brauche.PHP & MySQL: Show SUMME von etwas, klassifiziert von Distinct Kategorie

Ok, jetzt werde ich das Problem definieren.

Jetzt sagen wir, ich habe Tabelle mit diesen Spalten. tbl_transaction -> id | ref | Beschreibung | Wert | Kategorie | Unterkategorie

Wert ist ein ganzzahliger Spaltentyp mit einer gewissen Menge an Wert. wie zum Beispiel 100000 oder 200000.

Kategorie und Unterkategorie ist VARCHAR Typ Spalte, die Kategorie und Unterkategorie enthalten.

meine gewünschte Ausgabe ist es SUM von Wert basierend auf seiner Kategorie angezeigt. Für diese Logik habe ich diese Abfrage versucht (es ist kein gültiger mySQL-Code-Standard, sondern möchte nur eine Logik anzeigen).

X = select DISTINCT category from tbl_transaction; 
select SUM(value) from tbl_transaction WHERE category='X'; 

es funktioniert tatsächlich gut auf MySQL. aber ich möchte dieses Ergebnis auch in PHP drucken. Das Problem ist, dass ich diesen Wert nicht zusammen mit SUM und DISTINCT Kategorie drucken kann. Ich möchte etwas wie (in PHP-Ausgabe/Echo):

Kategorie | SUMME der Kategorie

A | 100000

B | 400000

C | 500000

Ich habe versucht, diesen Code auf PHP, und es nur die Kategorie gut drucken, aber nicht die Summe der Kategorie.

$query1=mysql_query("select DISTINCT category from tbl_transaction"); 
echo "<table><tr><td>Category</td>"; 
while($query2=mysql_fetch_array($query1)) 
{ 
echo "<tr><td>".$query2['category']."</td></tr></table>"; 

$query3=mysql_query("select SUM(value) from tbl_transaction WHERE category ="(select DISTINCT category from tbl_transaction)""); 
echo "<table><tr><td>SUM of Category</td>"; 
while($query4=mysql_fetch_array($query3)) 
{ 
echo "<tr><td>".$query4['value']."</td></tr></table>"; 
} 

} 

Ich habe mehrere Male versucht, es ist Null/Ressource ID # 7/Fehler. weit mehr davon möchte ich eigentlich so etwas.

Kategorie A

Sub Kategorie A - Gesamtbetrag der Unterkategorie A

Sub Kategorie B - Gesamtbetrag der Unterkategorie B

Sub Kategorie C - Gesamtbetrag der Unterkategorie C

Gesamt - Gesamtbetrag der Kategorie A

Kategorie B

Sub Kategorie A - Gesamtbetrag der Unterkategorie A

Sub Kategorie B - Gesamtbetrag der Unterkategorie B

Sub Kategorie C - Gesamtbetrag der Unterkategorie C

Gesamt - Gesamtbetrag der Kategorie B

Vielen Dank im Voraus, Stackoverflow Gemeinschaft.

+0

In der Zeile mit '$ query3' können Sie keine doppelten Anführungszeichen verwenden, ohne sie zu umgehen, da die äußere Zeichenfolge in Anführungszeichen eingeschlossen ist. Verwende entweder einfache Anführungszeichen oder entkomme sie wie '\" ' –

+2

*** Bitte [stoppe die mysql_ *' -Funktionen] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions) -in-php) *** [Diese Erweiterungen] (http://php.net/manual/en/migration70.removed-exts-sapis.php) wurden in PHP 7 entfernt. Erfahren Sie mehr über [prepared] (http : //en.wikipedia.org/wiki/Prepared_statement) Anweisungen für [PDO] (http://php.net/manual/en/pdo.prepared-statements.php) und [MySQLi] (http: // php. net/manual/de/mysqli.quickstart.prepared-statements.php) und erwäge die Verwendung von PDO, [es ist wirklich ziemlich einfach] (http://jayblanchard.net/demystifying_php_pdo.html) –

+0

@ JeremyHarris vielen Dank, ich Das nächste Mal werde ich versuchen, einzelne Anführungszeichen zu verwenden oder ihnen zu entkommen, wie Sie vorschlagen. –

Antwort

1

Sie können eine SQL-Anweisung wie folgt versuchen, die Werte Gruppierung durch eine Spalte Summe:

SELECT SUM(value) as Total_val, category FROM tbl_transaction GROUP BY category 

Und Sie können dies in PHP wie folgt verwenden: (Ich werde mit PDO geben, weil mysql_ Befehle jetzt alt und nicht empfohlen)

//Creating connection 
$connection=new PDO("mysql:host=127.0.0.1;dbname=database_name","root",""); 

//Creating main query, fetching main categories 
$query=$connection->prepare("SELECT category, SUM(value) as MAIN_CAT_TOTAL_VAL FROM tbl_transaction GROUP BY category"); 
$query->execute(); //executing query 

foreach($query->fetchAll() as $q) //fetching results 
{ 
    echo "<b>".$q["category"].":<br/></b>"; //printing main category name 

    //creating second query which sums value column and groups by sub category 
    $query2=$connection->prepare("SELECT SUM(value) as TOTAL_VALUE, sub-category FROM tbl_transaction WHERE category=:p1 GROUP BY sub-category"); 
    $query2->bindParam(":p1",$q["category"],PDO::PARAM_STR); //binding parameter to second query 
    $query2->execute(); //executing second query 
    foreach($query2->fetchAll() as $q2) //fetching the results 
    { 
     echo $q2["sub-category"]." -> ".$q2["TOTAL_VALUE"]."<br/>"; //printing the results 
    } 

    echo "total amount of category ".$q["category"]." = ".$q["MAIN_CAT_TOTAL_VAL"]; 
    echo "<hr/>"; //cosmetics 
} 

Dies sollte funktionieren, wenn Sie es richtig bearbeiten. Es kann ein wenig kompliziert aussehen, wenn Sie nicht sicher sind, wie Sie PDO verwenden sollten, ich schlage vor, Sie sollten es sich ansehen.

+1

ich versuche das jetzt definitiv, hoffe ich werde es schaffen. ich werde euch auf dem laufenden halten und danke für die codes, ich schätze es sehr. –

+1

Ich habe das versucht, arbeite sehr gut. Vielen Dank, du hast mir einfach geholfen. ich werde das Muster dieses Codes lernen, also kann ich diesen Code zu anderer aber ähnlicher Situation später verwenden. noch einmal, vielen Dank. –