PHP& MySQL:显示某事物的总和,按不同类别分类

时间:2016-07-27 18:10:21

标签: php mysql arrays

你可以帮帮我吗?如果你能给出答案并给出解释,我会更加感激,因为我想了解更多,我已经真的感谢这个社区了。通过学习帮助我很多。但只有答案对我来说足够好,因为我真的需要这个代码。

好的,现在我将定义问题。

现在,让我说我有这些列的表。 tbl_transaction - > id | ref |描述|价值|类别|子类

value是一个整数列类型,具有一定的值。例如100000或200000。

category和subcategory是VARCHAR类型列,包含category和subcategory。

我想要的输出是它会根据类别显示值的总和。对于那个逻辑,我尝试了这个查询(它不是一个有效的mySQL代码标准,只是想显示一个逻辑)。

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

它实际上在MySQL上工作得很好。但我也想把这个结果打印到PHP。问题是我不能打印此值以及SUM和DISTINCT类别。我想要类似的东西(在PHP输出/回声中):

类别|类别的总和

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类

子类别A - 子类别A的总金额

子类别B - 子类别B的总金额

子类别C - 子类别C的总量

总计 - A类总金额

B类

子类别A - 子类别A的总金额

子类别B - 子类别B的总金额

子类别C - 子类别C的总量

总计 - B类总金额

提前感谢Stackoverflow社区。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用这样的sql语句来按值列出值GROUPing:

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

你可以在PHP中使用这个: (我用PDO输入,因为mysql_命令现在变老了,不推荐使用)

//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,它看起来有点复杂,我建议你看看它。