PHP MySQL 每日结果表

标签 php mysql

希望有人能提供帮助 我正在尝试构建一个每日销售表,并显示一个表,每个销售人员都可以在其中查看他们每周的每日结果。我确定它并不过分困难,但我一直在摸索这个问题,我是 php 的新手,MySQL 一直在寻找我的方法,虽然没问题,但这让我着迷

我试图达到的结果看起来像这样。

-------------------------------------------------
|Name | sun | mon | tue | wed | thu | fri | sat | 
-------------------------------------------------
|pete |  0  |  0  |  0  | 200 | 200 |  0  |  0  |
-------------------------------------------------
|mike |  0  |  0  |  0  |  0  | 100 |  0  | 100 |
-------------------------------------------------

我使用的表格的一个例子是......

------------------------------------------------
| order_number | order_value | user_name | Date |
-------------------------------------------------
|    1         |     100     |   pete    | 10/7 |
-------------------------------------------------
|    2         |     200     |   mike    | 13/7 |
-------------------------------------------------
|    3         |     100     |   pete    | 10/7 |
-------------------------------------------------
|    4         |     100     |   mike    | 11/7 |
-------------------------------------------------
|    5         |     200     |   peter   | 11/7 |
-------------------------------------------------

我目前使用的代码如下 不确定通过 PHP 代码或使用更好的 SQL 查询来处理这些数据是否更好。

$sql = mysqli_query($mysqli," SELECT SUM(order_value) , DAYOFWEEK(Date) , `user_name` 
FROM  `my_table` 
WHERE WEEK(Date) = $thisweek -1 AND YEAR(Date) = $currentYear 
GROUP BY user_name , DAYOFWEEK(Date)");

echo "
<table border ='1'>
<tr><td>Name</td><td>sun</td><td>mon</td><td>tue</td><td>wed</td><td>thu</td><td>fri</td><td>sat</td></tr>";


while($result=mysqli_fetch_array($sql))
{
    $i = $result['DAYOFWEEK(Date)'];
    $v = $result['SUM(order_value)'];
    $n = $result['user_name'];  
    $d = $i;

    echo "<td>" . $n . "</td>";

for($d=1; $d<=7; $d++ )
{
    if($v >0 && $d == $i)
    {
        echo "<td>" . $v . "</td>";
    }
    else
    {
        echo "<td>0</td>";
    }
} 
    echo"</tr>";
}

    echo "</table>";

从这段代码中得到的结果很接近,但我希望它变平,这样每个用户只在表中出现一次,

-------------------------------------------------
|Name | sun | mon | tue | wed | thu | fri | sat | 
-------------------------------------------------
|pete |  0  |  0  |  0  | 200 |  0  |  0  |  0  |
-------------------------------------------------
|pete |  0  |  0  |  0  |  0  | 200 |  0  |  0  |
-------------------------------------------------
|mike |  0  |  0  |  0  |  0  | 100 |  0  |  0  |
-------------------------------------------------
|mike |  0  |  0  |  0  |  0  |  0  |  0  | 100 | 
-------------------------------------------------

如有任何帮助或建议,我们将不胜感激。

最佳答案

听起来您正在寻找 PIVOT 您的结果。这应该可以使用 SUMCASE:

SELECT `user_name`,
    SUM(CASE WHEN DAYOFWEEK(Date) = 1 THEN order_value ELSE 0 END) Sun,
    SUM(CASE WHEN DAYOFWEEK(Date) = 2 THEN order_value ELSE 0 END) Mon,
    ...
    SUM(CASE WHEN DAYOFWEEK(Date) = 7 THEN order_value END) Sat  
FROM  `my_table` 
WHERE WEEK(Date) = $thisweek -1 AND YEAR(Date) = $currentYear 
GROUP BY user_name

关于PHP MySQL 每日结果表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17636616/

相关文章:

php - PHP 统计今天和昨天注册的用户数

php - 使用PHP连接MYSQL

php - 更改链接,从 id 到 names

mysql - 将 Oracle SQL 连接查询转换为 MySQL 查询

mysql - 使用 Amazon Web Services(EC2 等)托管 CakePHP 应用程序?

php - 如何使用 3 个键插入或更新 mysql 表

javascript - 将有效的 Javascript Google map 代码添加到 WordPress

PHP 扩展在命令行 (cli) 中加载但未由 apache 加载

php - 在 javascript 中使用 php 数组?

mysql - PowerSchool:如何查询过去的注册情况