[英]PHP MySQL daily results table
希望有人可以幫助我嘗試建立“每日銷售”表,並顯示一個表,每個銷售人員每周都可以查看其每日結果。 我確定它不是太困難,但是我一直在努力地努力,對於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
結果。 這應該與CASE
一起使用SUM
可以工作:
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
另一個答案在這里很好,我認為您應該實現它,但是我將進一步建議您運行某種計划的過程來自動為您執行此過程(如果這是一個大型數據集,或者需要任何種類的數據)性能。
您正在做一個非常清楚的案例,用於存儲所有數據的非規范化副本以用於報告目的。
對您來說,這就像創建一個與此處所需輸出完全相同的表一樣簡單,因此您可以對其執行Select *
類型的查詢,而無需進行透視操作。 您的需求可能會有所不同,但是如果您發現自己遇到了性能問題,則應該考慮一下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.