我有一个名为" transactions"的表,在那里我每次有人在我的网站上购买时都会输入用户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
如果我从查询中删除$time
,那么它只会选择第一行并打印出每天的内容。
示例:如果有人购买了3件东西,但第一件事花了60美元,那么它将打印出来60,60,60,60,60,60,60
有人可以帮助我如何从每天选择金额总和并打印出来吗?
答案 0 :(得分:0)
在学习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;
}
...