【问题标题】:Calculate monthly totals using php使用php计算每月总计
【发布时间】:2013-05-23 14:55:29
【问题描述】:

我正在使用以下代码来计算我一直在做的工作的总数。我现在想做的是为每个月添加一个总数,但我不知道如何调整它来做到这一点。我需要类似的东西

$query = $db->query("SELECT SUM(pricequoted) pricequotedtotal,SUM(partprice) partpricetotal,SUM(profit) profittotal FROM `jobdetails` WHERE jobstatus='complete' AND WHERE `completeddate` = ALL DATES IN JANUARY, FEB, ETC ETC"

每个月都这样做,所以我每个月都可以: 一月 引用: 200 英镑 零件价格: 50 英镑 利润 : 150 英镑

    // Work Complete Totals
    $query = $db->query("SELECT SUM(pricequoted) pricequotedtotal,SUM(partprice) partpricetotal,SUM(profit) profittotal FROM `jobdetails` WHERE jobstatus='complete'");
    $result = $query->fetch_object();
    $pricequoted1 = "{$result->pricequotedtotal}";
    $pricequoted = number_format($pricequoted1, 2, '.', '');
    $partprice1 = "{$result->partpricetotal}";
    $partprice = number_format($partprice1, 2, '.', '');
    $profit1 = "{$result->profittotal}";
    $profit = number_format($profit1, 2, '.', '');
    echo '<div style="float:right; padding-right:10px;">';
    echo '<strong>Work Complete Totals</strong>';
    echo '<p><strong style="color:red;">Quoted Total : &pound;'.$pricequoted.'</strong></p>';
    echo '<p><strong style="color:Darkorange ;">Parts Total : &pound;'.$partprice.'</strong></p>';
    echo '<p><strong style="color:green;">Profit Total : &pound;'.$profit.'</strong></p>';
    echo '</div>';

身份证 客户ID 姓名 脸书用户网址 电话 电子邮件 地址 维修项目 维修细节 其他详情 报价 零件价格 利润 datepartordered 工作现状 完成日期 创建日期 商品编号

47 bf0b4 贝基莱特 https://www.facebook.com/becki.lett 笔记本电脑 我女儿的笔记本电脑似乎有问题,我会... 好的,没问题,我应该可以让你适应... 0 1970-01-01 进行中作业stodo 1970-01-01 2013-04-30 4558547578

【问题讨论】:

  • 您需要按适当的列对结果进行分组。你能告诉我们你的表的架构和几个示例行吗?

标签: php mysql sum


【解决方案1】:

您的代码经过稍微清理的版本,缺少 GROUP BY 语句。试试这个。

// Work Complete Totals
$query = $db->query("SELECT SUM(pricequoted) AS pricequotedtotal,
                            SUM(partprice) AS partpricetotal,
                            SUM(profit) profittotal,
                            DATE_FORMAT('%Y-%m', completeddate) AS month 
                     FROM `jobdetails` 
                     WHERE jobstatus='complete'
                     GROUP BY DATE_FORMAT('%Y-%m', completeddate)");


echo '<div style="float:right; padding-right:10px;">';
echo '<strong>Work Complete Totals</strong>';

while($result = $query->fetch_object()) {

    $pricequoted = number_format($result->pricequotedtotal, 2, '.', '');
    $partprice   = number_format($result->partpricetotal, 2, '.', '');
    $profit      = number_format($result->profittotal, 2, '.', '');

    echo '<p><strong style="color:red;">Quoted Total : &pound;'.$pricequoted.'</strong></p>';
    echo '<p><strong style="color:Darkorange ;">Parts Total : &pound;'.$partprice.'</strong></p>';
    echo '<p><strong style="color:green;">Profit Total : &pound;'.$profit.'</strong></p>';
}

echo '</div>';

【讨论】:

  • 已添加...根据需要选择我的版本,其中年份和月份在一列中,或者 allen213 在两列中。
  • 嗨,这似乎只给了我到目前为止的总数,但仅此而已?
  • 好吧,我想我不知道你需要什么。您可能只需要将 WHERE 子句更改为其他内容。也许更多地解释一下你想要什么结果以及为什么你的模式是?
  • 该死,我忘了你现在有多行了……现在试试。 (盲编码但不执行);)
  • 顺便说一下,completeddate 应该是 dateofcompletion 但是我在复制它时改变了它:-)
【解决方案2】:

使用Mysql GROUP BY

例如

SELECT Year(record_date),MONTH(record_date),SUM(pricequoted) pricequotedtotal,SUM(partprice) partpricetotal,SUM(profit) profittotal FROM `jobdetails` 
WHERE jobstatus='complete'
GROUP BY YEAR(record_date), MONTH(record_date)

record_date 将是日期或日期时间类型的列

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 2016-11-16
    • 2021-07-17
    相关资源
    最近更新 更多