2016-07-27 7 views
2

私を助けてくれますか?あなたが説明をつけて答えを与えることができれば、私はより多くのことを学びたいので、もっと感謝しています。私はこのコミュニティに対して実際に感謝しています。学習に多くの助けをします。しかし、私は本当にこれのためのコードが必要なので、唯一の答えは私のために十分です。PHPとMySQL:別のカテゴリ別に分類された何かのSUMを表示

ここで問題を定義します。

今、私はこれらの列でテーブルがあると言うことができます。 tbl_transaction - > id | ref |説明|値|カテゴリ|サブカテゴリ

値は、ある程度の量の整数列型です。たとえば100000または200000のようになります。

カテゴリとサブカテゴリは、カテゴリとサブカテゴリを含むVARCHARタイプの列です。

私の希望する出力は、そのカテゴリに基づいて価値のSUMを表示します。そのロジックのために私はこのクエリを試しました(それは有効なmySQLコード標準ではなく、単にロジックを表示したい)。

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

実際にはMySQLでうまく動作します。しかし私はこの結果をPHPにも出力したい。問題は、私はこの値をSUMとDISTINCTカテゴリとともに表示できないことです。私は(PHPの出力/エコー)のようなものが欲しい:

カテゴリ|カテゴリのSUM

A | 100000

B | 400000

C | 500000

私はこれらのコードをPHPで試してみましたが、カテゴリーだけを表示しますが、カテゴリーのSUMは表示しません。

$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>"; 
} 

} 

私は数回試しましたが、結果はnull /リソースID#7 /エラーです。これよりはるかに、私は実際にこのようなものがほしいと思う。

カテゴリ

サブカテゴリーA - サブカテゴリの総量

サブカテゴリーB - サブカテゴリーBの合計量

サブカテゴリーC - サブカテゴリーC

の総量

合計 - カテゴリAの総量

カテゴリB

サブカテゴリーA - サブカテゴリの総量

サブカテゴリーB - サブカテゴリーBの合計量

サブカテゴリーC - カテゴリの総量 - サブカテゴリーC

合計の総量B

ありがとう、Stackoverflowコミュニティ。mysql_コマンドがあるので、(私はPDOと入力します :

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

そして、あなたはこのようにPHPでこれを使用することができます。

+0

'$ query3'の行では、外側の文字列が二重引用符で囲まれているので、二重引用符をエスケープしないで使用することはできません。一重引用符を使用するか、 '\"のようにエスケープしてください –

+2

*** [mysql_ * '関数の使用を中止してください](http://stackoverflow.com/questions/12859942/why-shouldnt-i-iss-mysql-functions -in-php)。*** [これらの拡張機能](http://php.net/manual/en/migration70.removed-exts-sapis.php)はPHP 7で削除されました。[prepared](http ://en.wikipedia.org/wiki/Prepared_statement)[PDO](http://php.net/manual/en/pdo.prepared-statements.php)と[MySQLi](http:// php。 net/manual/en/mysqli.quickstart.prepared-statements.php)、PDOの使用を検討してください(実際にはかなり簡単です)(http://jayblanchard.net/demystifying_php_pdo.html) –

+0

@JeremyHarrisありがとう –

答えて

1

あなたは、列によってグループ化値を合計するために、このようなSQL文を試すことができます今は古くなっており、お勧めしません)

//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 
} 

これは正しく編集した場合に有効です。 PDOの使い方がわからない場合は、少し複雑に見えますが、私はあなたにそれを見てみることをお勧めします。

+1

私は間違いなくこれを今試してください、私は成功することを願っています。私はあなたに知らせてくれるでしょうし、コードについては本当にありがとう、本当に感謝しています。 –

+1

私はこれを試して、非常にうまく動作します。本当にありがとう、あなたは私を助けてくれました。私はこのコードのパターンを学ぶので、私はこのコードを別の類似の状況に後で使うことができます。もう一度、ありがとうございました。 –

関連する問題