Как объединить две строки MySQL в один и отобразить их в таблице с помощью PHP?
У меня есть таблица "exercise_results". Люди положили свои результаты в начале, а затем через два месяца поставили свои результаты, чтобы увидеть, насколько они улучшились. Их начальный набор имеет упражнение_type_id из "1", а в конце набор имеет значение exercise_type_id "2".
Мне нужен способ показать это в таблице HTML, которая выглядит так:
![Обычно я делаю это с помощью]()
цикл foreach, но с одиночными строками. У меня возникли проблемы с объединением двух строк в один. Я думаю, что это может быть так просто, как присоединение к MySQL? Мы идентифицируем каждого человека по их личности_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
Я пробовал несколько решений, но я потерялся. Любая помощь будет большой. Спасибо!
EDIT:
В ответ на комментарий ниже я надеюсь, что для некоторых данных, таких как:
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'
Ответы
Ответ 1
Вы можете использовать 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 с полями результата, чтобы получить результаты для каждого типа.
Ответ 2
$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);
Ответ 3
Извлеките всю таблицу, или какие строки вам интересны, сортируйте идентификатор личности, сравните идентификатор личности каждой строки со следующей, чтобы увидеть, есть ли результат для печати для всех столбцов в вашей таблице HTML. Если нет, перейдите к следующему и оставьте поля пустыми (или какое-то другое решение, возможно, игнорируете лиц, которые не заполнили оба поля?).
Мои навыки PHP ограничены, поэтому нет примера кода.
Ответ 4
Если вы заказываете person_unique_id
, тогда exercise_type_id
, вы можете сделать это. Если у вас есть две строки для всех, вы можете оставить if (используйте только else):
for( $i = 0; $i < count($exercise_results); $i++ )
{
$first = $exercise_results[$i];
if( !isset($exercise_results[$i+1])
|| $first['person_unique_id'] != $exercise_results[$i+1]['person_unique_id' ) {
$second = array(
'person_name'=>$other['person_name'],
'mile_running_time' => null // fill in the rest with defaults (like null)
);
} else {
$second = $exercise_results[$i+1];
$i++; // skip ahead one, since you've already used the second result.
}
// perform your normal printing, but use $beginning and $end to get the respective results
}