Возможный дубликат:
Отображение отдельных столбцов и нечеткого столбца в одной таблице
У меня 3 таблицы. Один из них – userinfo
(где вы можете найти Name
), затем logs
для входа и evaluation
для оценки пользователем активности. Они связаны полем attendee_id
.
Когда я присоединился к ним, он дал мне этот результат:
Я хочу получить такой вывод:
Когда я использую GROUP BY Name, он возвращает только одну строку для каждого и не возвращает другие данные.
Это можно сделать так. В этом примере я жестко закодировал массив $rows
, но вы можете заменить его массивом строк из базы данных.
<?php $rows = array( array( 'name' => 'Juan', 'login' => '09:00:01', 'evaluation' => 'Yes' ), array( 'name' => 'Juan', 'login' => '09:00:02', 'evaluation' => 'Yes' ), array( 'name' => 'Juan', 'login' => '09:00:03', 'evaluation' => 'Yes' ), array( 'name' => 'Jose', 'login' => '09:00:04', 'evaluation' => 'No' ), array( 'name' => 'Jose', 'login' => '09:00:05', 'evaluation' => 'No' ) ); ?> <table> <tr> <th>Name</th> <th>Login</th> <th>Evaluation</th> </tr> <?php $prevName = ''; foreach($rows as $row): if($prevName == $row['name']) { $name = ''; } else { $name = $prevName = $row['name']; } ?> <tr> <td><?php echo htmlspecialchars($name); ?></td> <td><?php echo htmlspecialchars($row['login']); ?></td> <td><?php echo htmlspecialchars($row['evaluation']); ?></td> </tr> <?php endforeach; ?> </table>
Результат:
Я пытался сделать это несколько раз и сдался. В конце я отформатировал вывод в PHP, проверив, отличается ли значение для «name» в текущей строке предыдущей:
<?php //Assume the query has been done //... $lastName=''; echo '<table>'; while ($row=mysql_fetch_assoc($query_result)) { if ($row['name']!=$lastName) { $lastName=$row['name']; } else { $row['name']=''; } echo '<td>'.implode('</td><td>',$row).'</td>; echo '<tr>'; } echo '</table>';
Это некрасиво, но это даст вам результат, который вы хотите. Вы можете его испортить