1

名为锻炼的 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

我想将结果排序为每个动作的 sum sets*reps,然后按 wn 对结果进行排序并使用 php 在表格中显示。

所以我会为每个 wn 和每个动作的总数设置一行,例如:

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

谢谢。

4

2 回答 2

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,它应该很容易使用。

于 2013-08-21T07:00:03.913 回答
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

样本输出:

| 西宁 | 推 | 拉 | 深蹲 | 铰链 | 携带 |
-------------------------------------------------- -
| 32 | 15 | 6 | (空) | (空) | (空) |
| 31 | 15 | 10 | 15 | (空) | (空) |
| 30 | 15 | (空) | (空) | 15 | (空) |
| 29 | (空) | (空) | (空) | (空) | 15 |

这是SQLFiddle演示

于 2013-08-21T07:05:06.007 回答