2013-08-21 68 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