我有一张名为' orders'它包含; id,order_total和time字段。 '时间'是一个整数并存储一个unix时间戳......
订单
| id | order_total | time | ------------------------------------- | 1 | 42.00 | 1443355834 | | 2 | 13.00 | 1443460326 | | 3 | 51.00 | 1443468094 | | 4 | 16.00 | 1443477442 | | 5 | 10.00 | 1443606966 | | 6 | 53.00 | 1443608256 |
我希望能够在表格中使用php显示' order_total'对于之前的' x'天数(或数周或数月)所以它看起来像这样:
| Date | Order Total | --------------------------- | 27/09/15 | 42.00 | | 28/09/15 | 80.00 | | 30/09/15 | 63.00 |
我已经制作了一个MYSQL查询和一个有效的PHP循环,但对于MYSQL来说是新手我可能过于复杂了,必须有一个更简单的方法来做到这一点?当我说某种有效的方法时,它会正确地汇总并显示order_totals直到当天,但出于某种原因会将当天与前一天结合起来。
以下是我目前的情况:
$x = $interval;
$y = $x - 1;
while ($x > 0) {
$sql10 = "
SELECT id,
time,
SUM(order_total) as sum,
date_format(DATE_SUB(FROM_UNIXTIME($now_time), INTERVAL $x DAY), '%Y-%m-%d') as thedate
FROM $ordersTABLE
WHERE FROM_UNIXTIME(time) BETWEEN date_format(DATE_SUB(FROM_UNIXTIME($now_time), INTERVAL $x DAY),'%Y-%m-%d')
AND date_format(DATE_SUB(FROM_UNIXTIME($now_time), INTERVAL $y DAY),'%Y-%m-%d')";
$result10 = mysql_query ( $sql10, $cid ) or die ( "Couldn't execute query." );
while ( $row = mysql_fetch_array ( $result10) ) {
$order_total = $row ["order_total"];
$thedate = $row ["thedate"];
$sum = $row ["sum"];
$sum = number_format($sum,2);
$thedate = strtotime($thedate);
$thedate = date("d/m/y",$thedate);
print "<tr><td width=\"120\">$thedate</td><td>\$$sum</td></tr>";
}
$x--;
$y--;
}
(字符串$ now_time包含当前时间作为Unix时间戳,因此转换为系统时间无法更改,并且包含用户的正确本地时间)
有更好的方法吗?
答案 0 :(得分:1)
您可以使用FROM_UNIXTIME功能将时间戳转换为YYYY MM DD,然后仅选择那些因DATEDIFF功能而足够老的时间戳。今天的日期由CURDATE函数提供。
首先,查询检索比间隔更旧的订单的总计并重新格式化日期字段:
$q1 = "SELECT " . $ordersTABLE . ".order_total AS total, FROM_UNIXTIME(" . $ordersTABLE . ".time, '%Y-%m-%d') AS short_date FROM " . $ordersTABLE . " WHERE DATEDIFF(CURDATE(), short_date) > " . $intervalInDAYS;
然后,总结当天总数的那个:
$q2 = "SELECT short_date AS day, SUM(total) AS total FROM (" . $q1 . ") GROUP BY short_date";
然后执行存储在$q2
中的查询以及显示结果所需的所有其他操作
查询的结果应采用以下形式:
| day | total |
===========================
| 25/09/15 | 34.00 |
| 16/09/15 | 100.00 |
| 31/07/14 | 3.20 |
| ... | ... |