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

如何将两个MySQL行合并为一个,并使用PHP在表中显示它们?,php,mysql,Php,Mysql,我有一张“练习结果”表。人们在开始时输入结果,然后两个月后输入结果,看看他们有多大进步。他们的开始集的练习类型id为“1”,结束集的练习类型id为“2” 我需要一种方法将其显示到HTML表中,如下所示: SELECT person_unique_id, person_name, group_concat( mile_running_time ) AS miles, group_concat( bench_press_weight_lbs ) AS bench,

我有一张“练习结果”表。人们在开始时输入结果,然后两个月后输入结果,看看他们有多大进步。他们的开始集的练习类型id为“1”,结束集的练习类型id为“2”

我需要一种方法将其显示到HTML表中,如下所示:

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

一个foreach循环,但它是单行的。我很难把两行合并成一行。我认为这可能像某种MySQL连接一样简单?我们通过每个人的唯一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'
据我所知

编辑:

试试这个

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

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

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


 }

 print_r($rows);

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


我的PHP技能有限,因此没有代码示例。

如果您是在
person\u unique\u id
上订购,那么
练习\u type\u id
,您可以这样做。如果每个人都有两行,则可以省略If(仅使用else):

for($i=0;$i$other[“人名”],
'mile_running_time'=>null//用默认值(如null)填充其余部分
);
}否则{
$second=$exercise_结果[$i+1];
$i++;//跳过一个,因为您已经使用了第二个结果。
}
//执行正常打印,但使用$start和$end分别获得结果
}

您可以使用GROUP\u 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和结果字段来获得每种类型的结果。

数据库是否已修复?我的意思是,您可以更改表吗?不完全可以。生产应用程序中已使用了大量表中的数据。您可以通过按id分组并选择MAX(如果有)来执行查询(练习类型id=1,英里跑步时间“”)作为“开始”,最大值(如果(练习类型id=2,英里跑步时间“”)作为“结束”等…可能有点挑战性,但我必须做这种汇总。这段代码不是会在HTML表中为每个人创建两行吗?第一行是他们的开始数据,第二行是他们的结束数据?我试图让你的想法起作用,但遇到了困难。我想问题出在我的查询中。谢谢。很高兴有这样的想法这是一个非常简单的解决方案,但限制性很强。如果有任何字段中有逗号(或者如果MySQL支持逗号作为小数点?),这将不起作用。至少使用一个不太常见的字符,如管道:|您可以在组中指定所需的分隔符,如下所示:group_concat(mile_running_time separator'#)谢谢你的额外提示。有些数据可能有逗号,所以很高兴知道。谢谢。GROUP_CONCAT是一个非常有用的工具,我希望我能早点知道。
J123  |  John Smith  |  8,7  |  200,250  |  300,400

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