使用MYSQL / PHP

时间:2015-09-30 10:54:17

标签: php mysql database

我有一张名为' 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时间戳,因此转换为系统时间无法更改,并且包含用户的正确本地时间)

有更好的方法吗?

1 个答案:

答案 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      |
|    ...    |     ...     |