簡體   English   中英

PHP MySQL每日結果表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM