PHP& MySQL:SUM值BY DISTINCT类别

时间:2016-07-28 15:17:05

标签: php mysql

谢谢你对我的案子感兴趣。总之,我想告诉我,我想知道MySQL表中的值是否只能通过MySQL查询来计算,或者需要PHP代码来计算。我不知道如何编码。

案例:

我有tbl_transaction,其格式如下:

id | ref | description | value | date | category | sub_category

值是INT类型列,例如它包含10000,20000等。

让我们说我想要SUM值列,但是要通过DISTINCT Category

例如,它会像这样工作:

category A SUM minus(-) category B SUM plus(+) category C SUM = Result of Counted SUM

实验:

我试过这样的事情,显然不会工作,但我试图在这里展示我的逻辑来解决案例。

SELECT SUM(value) as MAIN_CAT_TOTAL_VAL 
  FROM tbl_transaction 
 WHERE monthTransaction LIKE '$newmonthminusone%' ONE
     , ONE+3

渴望学习:

我想知道如何将mySQL查询打印到PHP中。如果可能的话,代码背后的代码,我实际上需要代码。有人说mysql_函数不再是最新的,不应该被使用。但我对如何使用替换mysql_函数的新函数没有明确的知识,比如PDO和类似的东西。我真的需要解释。我从代码和案例中学习,至少我是如何适应的。所以代码会对我有所帮助。

期望输出:

Number / value, result of SUMMED UP table calculation (math). 

我根本不知道如何编码和启动。被困了几个小时。我真诚地需要帮助。太多了。

3 个答案:

答案 0 :(得分:2)

总结一个类别的值

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

我希望您有足够的知识来扩展此查询以包含更多字段或过滤掉您不希望包含在总和中的内容。

答案 1 :(得分:2)

mysqli_ *几乎是mysql_ *的直接替代品,是学习PDO的一个很好的过渡,因为你可以使用你的(大部分)未经修改的现有代码,并转向面向对象的方法和准备好的语句你了解他们。

也就是说,您在查询中可能要查找的内容如下:

SELECT
    category,
    SUM(value) AS MAIN_CAT_TOTAL_VAL
FROM tbl_transaction
WHERE monthTransaction LIKE '$newmonthminusone%' AS ONE
GROUP BY category;

然后你就可以像这样使用它了:

$link = mysqli_connect("localhost", "dbuser", "dbpassword", "dbname");
$query = mysqli_query($link, $queryStringFromAbove);
$total = 0;
while($row = mysqli_fetch_assoc($query)) {
    switch($row['category']) {
        case "A":
        case "C":
            $total += $row['MAIN_CAT_TOTAL_VAL'];
            break;
        case "B":
            $total -= $row['MAIN_CAT_TOTAL_VAL'];
            break;
    }
}
echo $total;

编辑:很难准确判断您的添加或减少条件,但switch()块应该足够灵活,可以根据您的需要进行定制。

答案 2 :(得分:1)

@SuperJer有mysqli的解决方案。如果你想要mysql解决方案:

// Create connection to your server
$handle=mysql_connect('your_server_name','your_server_password');

// Check that connection was successful
if($handle == FALSE)
   die("No connection available: ".mysql_error());

// Select your database
$db=mysql_select_db('your_database_name');
if($db == FALSE)
   die("Unable to select DB: ".mysql_error());

// Formulate query
$query = SELECT category, SUM(value) AS categoryTotal FROM tbl_transaction GROUP BY category;

// Run query
$result = mysql_query($query, $handle);

// Store result
$total = 0;    
while($row=mysql_fetch_assoc($result)){
    switch($row['category']) {
    case "A":
    case "C":
        $total += $row['MAIN_CAT_TOTAL_VAL'];
        break;
    case "B":
        $total -= $row['MAIN_CAT_TOTAL_VAL'];
        break;
    }
}

我希望这会有所帮助