次のようなSQLステートメントを試して、列ごとにグループ化された値を合計できます。
SELECT SUM(value) as Total_val, category FROM tbl_transaction GROUP BY category
そして、これをPHPで次のように使用できます:( mysql_コマンドは現在古くなっており、推奨されていないため、PDOで入力します)
//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の使用方法がわからない場合は、少し複雑に見える可能性があります。ぜひご覧になることをお勧めします。