如何将两个MySQL行合并为一个,并使用PHP在表中显示它们?
我有一张“练习结果”表。人们在开始时输入结果,然后两个月后输入结果,看看他们有多大进步。他们的开始集的练习类型id为“1”,结束集的练习类型id为“2” 我需要一种方法将其显示到HTML表中,如下所示:如何将两个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,
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