2013-08-21 67 views
1
稱爲鍛鍊

MySQL表具有以下佈局:PHP MySQL的總和排序

exercise |weight|sets|reps|action | wn 
---------------------------------------------- 
deadlift | 80 | 6 | 1 | pull | 32 
bb press | 40 | 3 | 5 | push | 32 
bb rows | 20 | 2 | 5 | pull | 31 
blahblah | blah| 3 | 5 | push | 31 
blahblah | blah| 3 | 5 | squat | 31 
blahblah | blah| 3 | 5 | push | 30 
blahblah | blah| 3 | 5 | hinge | 30 
blahblah | blah| 3 | 5 | carry | 29 

我想作爲和設置*代表每個動作的結果進行排序,然後排序表中的由WN並顯示結果使用PHP。

,所以我將有一排像每個動作的每個WN和彙總:

wn | push | pull | squat | hinge | carry 
---------------------------------------- 
32 | 80 | 120 | 90 | 180 | 40 
31 | 65 | 60 | 80 | 150 | 34 
30       
29 

感謝。

回答

0

如果我得到了你的問題所在,你可以做這樣的事情:

// $rows are your MySQL fetch_assoc rows 
foreach ($rows as $row) { 
    if(!isset ($wn_array[$row['wn']][$row['action']]) 
     $wn_array[$row['wn']][$row['action']] = ($row['sets'] * $row['reps']); 
    else 
     $wn_array[$row['wn']][$row['action']] += ($row['sets'] * $row['reps']); 
} 

你會得到一個$ wn_array某種程度上相當於你在找什麼,嘩嘩應該是很容易使用。

0

如果所有操作都知道前期你可以做條件SUM

SELECT wn, 
     SUM(CASE WHEN action = 'push' THEN sets * reps END) push, 
     SUM(CASE WHEN action = 'pull' THEN sets * reps END) pull, 
     SUM(CASE WHEN action = 'squat' THEN sets * reps END) squat, 
     SUM(CASE WHEN action = 'hinge' THEN sets * reps END) hinge, 
     SUM(CASE WHEN action = 'carry' THEN sets * reps END) carry 
    FROM workout 
GROUP BY wn DESC 

輸出示例:

 
| WN | PUSH | PULL | SQUAT | HINGE | CARRY | 
--------------------------------------------------- 
| 32 |  15 |  6 | (null) | (null) | (null) | 
| 31 |  15 |  10 |  15 | (null) | (null) | 
| 30 |  15 | (null) | (null) |  15 | (null) | 
| 29 | (null) | (null) | (null) | (null) |  15 | 

下面是SQLFiddle演示

+0

@chocman有沒有幫助?你的問題需要更多幫助嗎? – peterm