如何将两个MySQL行合并为一个并使用PHP在表中显示它们?

时间:2010-11-03 19:53:37

标签: php mysql

我有一张桌子“exercise_results”。人们在开始时投入他们的结果,然后在两个月之后将他们的结果放在他们的结果中,看看他们有多少改进。它们的开始集的exercise_type_id为“1”,而结束集的exercise_type_id为“2”。

我需要一种方法将其显示在一个看起来像这样的HTML表中:

Normally I do this using

一个foreach循环,但这是单行。我在将两行合并为一行时遇到了麻烦。我想这可能就像某种MySQL加入一样简单?我们通过person_unique_id识别每个人。

以下是我的字段:

id | person_unique_id | person_name | exercise_type_id | mile_running_time | bench_press_weight_lbs | squat_weight_lbs | date_of_exercise_performed

示例行:

1 | J123 | John Smith | 1 | 8  | 200 | 300 | 2010-03-20
2 | J123 | John Smith | 2 | 7  | 250 | 400 | 2010-05-20
3 | X584 | Jane Doe   | 1 | 10 | 100 | 200 | 2010-03-20
4 | X584 | Jane Doe   | 2 | 8  | 150 | 220 | 2010-05-20

我尝试了一些解决方案,但我迷路了。任何帮助都会很棒。谢谢!

编辑:

在回应下面的评论时,我希望得到一些数据:

array  0 => 
array
  'Exercise' => 
    array
      'person_unique_id' => string 'J123'
      'person_name' => string 'John Smith'
      'begin_mile_running_time' => string '8'
      'end_mile_running_time' => string '7'
1 => 
array
  'Exercise' => 
    array
      'person_unique_id' => string 'X584'
      'person_name' => string 'Jane Doe'
      'begin_mile_running_time' => string '10'
      'end_mile_running_time' => string '8'

4 个答案:

答案 0 :(得分:17)

您可以使用 GROUP_CONCAT()获取两行结果,如下所示:

SELECT person_unique_id, person_name, 
       group_concat( mile_running_time ) AS miles,  
       group_concat( bench_press_weight_lbs ) AS bench, 
       GROUP_CONCAT( squat_weight_lbs ) AS squat
FROM exercise_result
GROUP BY person_unique_id

您的结果将如下:

J123  |  John Smith  |  8,7  |  200,250  |  300,400

X584  |  Jane Doe  |  10,8  |  100,150  |  200,220

然后你可以使用php explode和结果字段来获得每种类型的结果。

答案 1 :(得分:0)

$query = mysql_query("select ...your data");

 while ($row = mysql_fetch_assoc ($query) ) {
    if ($row['exercise_type_id']==1)  
      $exe1[]=$row;
   else  
      $exe2[]=$row;


 }

 print_r($exe1);
 print_r($exe2);

从我的理解

编辑:

试试这个

$query = mysql_query("select ...your data");

 while ($row = mysql_fetch_assoc ($query) ) {

   $rows[]=array('Exercise'=>$row);


 }

 print_r($rows);

答案 2 :(得分:0)

提取整个表格,或者对您感兴趣的行,对人员ID进行排序,将每行的人员ID与下一行进行比较,以查看是否有结果可以打印HTML表格中的所有列。如果没有,跳到下一个并将字段留空(或其他一些解决方案,可能会忽略那些没有填写这两个字段的人?)。

我的PHP技能有限,所以没有代码示例。

答案 3 :(得分:0)