sql SUM在特定日期作为用户输入,并在打印输出结果之前将结果返回到变量中

时间:2014-01-04 14:54:13

标签: php sql pdo sum

我可以知道如何在当前的sql代码上实现SUM amount吗?

我试过谷歌,但它似乎没有我想要的答案。其中大部分都是MySQL格式,与使用PDO库的当前代码完全不同。

我的代码:

try {
  $start_date = "3/1/2014";
  $end_date = "4/1/2014";
  $start = DateTime::createFromFormat('d/m/Y', $start_date);
  $end = DateTime::createFromFormat('d/m/Y', $end_date);
  $query = $db->prepare("SELECT * FROM log WHERE DATE(log_datetime) >= :start AND DATE(log_datetime) < :end + INTERVAL 1 DAY");
  $success = $query->execute(array(':start'=>$start->format('Y-m-d'), ':end'=>$end->format('Y-m-d')));

}
$rows = $query->fetchAll(PDO::FETCH_OBJ);

//result
foreach ($rows as $row) {
    $log_id         = $row->log_id;
    $dob            = $row->dob;
    $log_datetime   = $row->log_datetime;
    $log_count      = $row->log_count;
    $amount         = $row->amount;

    echo '<tr>';
    echo '<td>' . htmlspecialchars($log_id) . '</td>';
    echo '<td>' . htmlspecialchars($dob) . '</td>';
    echo '<td>' . htmlspecialchars($log_datetime) . '</td>';
    echo '<td>' . htmlspecialchars($log_count) . '</td>';
    echo '<td>' . htmlspecialchars($amount) . '</td>';
    echo '</tr>';
}

sqlfiddle:http://sqlfiddle.com/#!2/6fa8f/5

我想sum 'log_count'并返回用户输入日期和sum amount的访问人数,并返回该特定日期的收入值。

我如何在PHP PDO中执行此操作?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

UPDATE:您可以在迭代结果集时计算总和。像这样的东西

echo '<table><tbody>';
$log_count_total = 0;
$amount_total = 0;
foreach ($rows as $row) {
    $log_count_total += $row->log_count;
    $amount_total += $row->amount;

    echo '<tr>';
    echo '<td>' . $row->log_id . '</td>';
    echo '<td>' . $row->dob . '</td>';
    echo '<td>' . $row->log_datetime . '</td>';
    echo '<td>' . $row->log_count . '</td>';
    echo '<td>' . $row->amount . '</td>';
    echo '</tr>';
}
echo '<tr>';
echo '<td></td><td></td><td></td>';
echo '<td><strong>' . $log_count_total . '</strong></td>';
echo '<td><strong>' . $amount_total . '</strong></td>';
echo '</tr>';
echo '</tbody></table>';

输出:

4    1956-05-15    2014-01-03 20:37:27    1    10
5    1940-07-31    2014-01-03 21:37:27    1    10
6    2000-02-18    2014-01-04 18:30:27    1    10
7    1955-08-31    2014-01-04 19:32:27    1    10
8    1983-11-22    2014-01-04 20:31:27    1    10
9    1958-08-09    2014-01-04 21:05:27    1    10
                                          6    60

如果你需要一次性获得总数

SELECT SUM(log_count) total_log_count, SUM(amount) total_amount
  FROM log 
 WHERE log_datetime >= '2014-01-03' 
   AND log_datetime <  '2014-01-04' + INTERVAL 1 DAY

BTW:请勿在{{1​​}}子句中将DATE()函数应用于log_datetime。在这种情况下,它不仅无用,而且还会使您对该列的任何索引的使用无效,从而有效地导致完整扫描。

输出:

| TOTAL_LOG_COUNT | TOTAL_AMOUNT |
|-----------------|--------------|
|               6 |           60 |

这是 SQLFiddle 演示