2013-07-14 36 views
0

希望有人可以幫助我試圖建立一個每日銷售表,並顯示一個表,其中每個銷售人員可以每週查看其日常結果。我確信它不是很困難,但我一直在抓我的頭,這是一個新的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 | 
------------------------------------------------- 

表IM的一個例子是使用...

------------------------------------------------ 
| 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>"; 

從這個代碼的結果即時得到ITIS接近,但我想它夷爲平地所以每個用戶只在表中出現一次,

------------------------------------------------- 
|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 | 
------------------------------------------------- 

任何幫助或建議,將不勝感激。

回答

3

聽起來就像你想要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 
+0

除了我的頭頂,DayofWeek(日期)應該在Group By中嗎?當你總結時不應該消失嗎? – Jordan

+1

@Jordan - 我只是在編輯!謝謝! – sgeddes

+0

ahhhh輝煌,我實際上嘗試過類似的東西,但是我已經把DAYOFWEEK(日期)放在* smacks head *中。 – Tik

0

對方回答是這裏很好,我想你應該實現它,但我會讓你運行某種預定方法的進一步建議,爲自動執行你,如果這是一個大型的數據集,或者需要任何形式的表現。

你在做什麼是一個非常明顯的例子,用於存儲用於報告目的的所有數據的非規格化副本。

對於您來說,它可能就像創建一個與您在此處需要的輸出完全相同的表一樣簡單,因此您只需對其執行Select *類型的查詢而不是旋轉。您的需求可能會有所不同,但如果您發現自己遇到性能問題,則應考慮此問題。