我有一个名为“交易”的表格,每次有人在我的网站上购物时,我都会在其中输入用户ID,购买类型和金额。
我想在过去7天中向每个用户显示这些统计信息。
目前,我有这个:
$data = array();
for($x = 0; $x <= 6; $x++){
$time = time()-($x*86400);
$date = date("Y/m/d", time()-($x*86400));
$queryE = $dbh->prepare("SELECT * FROM transactions WHERE user=:username AND time=:time AND(type='upgrade' OR type='addrbl' OR type='clicks' OR type='banner') ");
$queryE->bindParam(":username",$userdata['id']);
$queryE->bindParam(":time",$time);
$queryE->execute();
$row=$queryE->fetch();
$data[] = ($row['amount'] > 0 ? $row['amount'] : 0);
$dates[] = date("Y/m/d", time()-($x*86400));
}
$days = array('Today');
for ($i=0; $i<7;$i++)
{
$days[$i] = date('d-m', strtotime('-'.($i+0).' day'));
}
然后打印出来,我有这个:
echo implode(',', $data);
尽管上面的代码只是打印出0,0,0,0,0,0,0,0
如果我从查询中删除
$time
,则它仅选择第一行并每天打印出来。示例:如果某人购买了3件东西,但第一件东西的价格为60美元,则它将打印出
60,60,60,60,60,60,60
有人可以帮我从每天中选择金额的总和并打印出来吗?
最佳答案
学习time
之后进行编辑是db中的unix时间戳
当前,您正在尝试获取给定时间(而非日期)的记录。由于您在db上有一个unix时间戳字段time
,因此需要给出一个间隔。另外,由于一天可能要进行多次购买,因此您需要在给定日期全部SUM
amounts
。
...
$begin = strtotime('today midnight');
for($x = 0; $x <= 6; $x++) {
$end = $begin + 86400;
$queryE = $dbh->prepare("SELECT SUM(amount) AS total FROM transactions WHERE user=:username AND time > :begin AND time <= :end AND(type='upgrade' OR type='addrbl' OR type='clicks' OR type='banner') ");
$queryE->bindParam(":username",$userdata['id']);
$queryE->bindParam(":begin", $begin);
$queryE->bindParam(":end", $end);
$queryE->execute();
$row=$queryE->fetch();
$data[] = $row['total'];
$dates[] = date("Y/m/d", $begin);
$begin -= 86400;
}
...