希望有人可以帮助我尝试建立每日销售表,并显示一个表格,每个销售人员可以每周查看他们的每日结果。我确定它不是太难,但我一直在摸不着头脑,我刚接触到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 |
-------------------------------------------------
任何帮助或建议都将不胜感激。
答案 0 :(得分:3)
听起来你正在寻找PIVOT
你的结果。这可以使用SUM
与CASE
:
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
答案 1 :(得分:0)
另一个答案很好,我认为你应该实现它,但我会进一步建议你运行某种预定的过程来自动为你做这个,如果这是一个大数据集,或者其他需要任何形式的表现。
您正在做的是一个非常明确的案例,用于存储所有数据的非规范化副本以用于报告目的。
对于您来说,它可能就像创建一个与此处所需的输出完全相同的表一样简单,因此您可以在其上执行Select *
类型的查询而不是旋转。您的需求可能会有所不同,但如果您发现自己遇到性能问题,则应该考虑它。