2010-02-12 64 views
0

我從MySQL如何使用php重新排列下列數據?

TOTAL COMPUTER  DATE  GROUP 
----------------------------------------------- 
48  LAPTOP2  2009-08-19  1 
77  LAPTOP2  2009-08-20  1 
0  LAPTOP2  2009-08-21  1 
15  LAPTOP1  2009-08-19  1 
25  MAIN  2009-08-23  1 
25  LAP3  2009-08-18  2 
3  LAP3  2009-08-19  2 
55  LAP3  2009-08-20  2 

檢索使用SQL查詢的以下數據我想重新排列等使用PHP

group computer 2009-08-18 2009-08-19 2009-08-20 2009-08-21 2009-08-22 2009-08-23 
------------------------------------------------------------------------------------------------ 
1  LAPTOP2  0   48   77   0   0   0 
1  LAPTOP1  0   15   0   0   0   0 
1  MAIN                 25 
2  LAP3   25   3   55   0   0   0 
+2

你只是重新格式化數據,還是你彙總總數?你的問題不清楚。 – artlung 2010-02-12 06:03:53

+0

是的,我彙總了來自mysql的總計。第一個是mysql的結果第二個是結果要生成 – 2010-02-12 06:06:25

回答

1

使用下面的查詢,以樞轉的數據中的數據:

SELECT t.group, 
     t.computer, 
     MAX(CASE WHEN t.date = '2009-08-18' THEN t.total ELSE 0 END) AS '2009-08-18', 
     MAX(CASE WHEN t.date = '2009-08-19' THEN t.total ELSE 0 END) AS '2009-08-19', 
     MAX(CASE WHEN t.date = '2009-08-20' THEN t.total ELSE 0 END) AS '2009-08-20' 
     --, etc... 
    FROM TABLE t 
GROUP BY t.group, t.computer 

您的選項要麼是爲您要旋轉的數據定義每一列,要麼您可以使用MySQL's Prepared Statement syntax來動態創建這些列。

我覺得有必要指出的是,你的榜樣是不一致的 - 爲LAPTOP2,你必須零爲2009-08-18值,但該main值爲空。這個日期也沒有記錄。如果您希望這些顯示爲空白/等,請在CASE語句中將ELSE 0 END更改爲ELSE NULL END

+0

然後你可以遍歷PHP – 2010-02-12 06:28:23

+0

感謝您的回覆,有沒有任何示例動態列語法 – 2010-02-12 11:27:28

+0

@Suriyan Suresh:是的,請參閱MySQL準備的鏈接聲明文檔:http://dev.mysql.com/tech-resources/articles/4.1/prepared-statements.html – 2010-02-12 15:36:30