Рассмотрим этот вопрос.
Исходная база тут
Исходный код такой обработки:
<?PHP
$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = '
SELECT
b.id bid, b.name book,
a.id aid, a.name author
FROM library l
INNER JOIN authors a ON l.auth_id = a.id
INNER JOIN books b ON l.book_id = b.id
';
$result = $db->query($query);
$library = array();
$lib_list = array();
while($row = $result->fetch_array()){
$auths=array();
if (
isset($lib_list[$row['bid']]['auths'])
&&
count($lib_list[$row['bid']]['auths']
))
{
$auths = $lib_list[$row['bid']]['auths'];
// сохраняем авторов, которые уже есть
}
$auths = array_merge($auths, (array)$row['author']);
// добавляем нового автора
$lib_list[$row['bid']] = array(
'book_id'=>$row['bid'],
'book_name'=>$row['book'],
'auths'=>$auths
);
}
$db->close();
if (count($lib_list)){
?>
<table>
<tr>
<th>Книга
<th>Авторы
</tr>
<?PHP
foreach ($lib_list as $key=>$lib_rec) {
echo '<tr>';
echo '<td>'.$lib_rec['book_name'].'</td>';
echo '<td>'.implode(', ',$lib_rec['auths']).'</td>';
echo '</tr>';
}
?>
</table>
<?PHP
}
?>
Результирующая таблица имеет вид:| Книга | Авторы |
|---|---|
| Мир героев | Николай Андреев |
| Лучшие из мертвых | Николай Андреев |
| Яд для живых | Николай Андреев |
| Сектор мутантов | Николай Андреев |
| Геном | Сергей Лукьяненко |
| Танцы на снегу | Сергей Лукьяненко, Николай Андреев |
Комментариев нет:
Отправить комментарий