У меня такой стол.
author_id author_book rating 1 ABC 5 1 DEF 6 2 PPP 8 3 FFF 9
Вот мой код PHP
<table> <tr><td>Author ID</td><td>Author Book</td><td>Rating</td></tr> <?php $row_data = mysql_query("select * from author_master" ); while($row = mysql_fetch_array($row_data) ) { ?> <tr> <td><?php echo $row['author_id']; ?></td> <td><?php echo $row['author_book']; ?></td> <td><?php echo $row['rating']; ?></td> </tr> <?php } ?> </table>
То, что я хотел бы сделать, – это сгруппировать аналогичного автора в той же строке.
Результат должен выглядеть так:
Author ID Author Book Rating 1 ABC 5 DEF 6 2 PPP 8 3 FFF 9
Попытайтесь избежать функций mysql_*
. Используйте mysqli_*
. Вам просто нужно сгруппировать их в первую очередь. Рассмотрим этот пример:
<?php $link = new mysqli('localhost', 'test', 'test', 'test'); $query = mysqli_query($link, 'SELECT * FROM author_master ORDER BY author_id'); $books = array(); while($row = $query->fetch_assoc()) { $books[$row['author_id']][] = $row; } ?> <table border="0" cellpadding="10"> <thead> <tr> <th>Author ID</th> <th>Author Book</th> <th>Rating</th> </tr> </thead> <tbody> <?php foreach($books as $author_id => $values): ?> <tr> <td><?php echo $author_id; ?></td> <td><?php foreach($values as $author_book) {echo $author_book['author_book'] . '<br/>';} ?></td> <td><?php foreach($values as $author_book) {echo $author_book['rating'] . '<br/>';} ?></td> </tr> <?php endforeach; ?> </tbody> </table>
Попробуй это
<table> <tr><td>Author ID</td><td>Author Book</td><td>Rating</td></tr> <?php $row_data = mysql_query("select * from author_master group by author_id" ); $temp=0; while($row = mysql_fetch_array($row_data) ) { if($temp==0) { $temp = $row['author_id']; } ?> <tr> <td><? if($temp != $row['author_id']) { $temp = $row['author_id']; php echo $temp; } ?></td> <td><?php echo $row['author_book']; ?></td> <td><?php echo $row['rating']; ?></td> </tr> <?php } ?> </table>
<?php $author = 0; $row_data = mysql_query("select * from author_master" ); while($row = mysql_fetch_array($row_data) ) { if($author = $row['author_id']) { $display = ""; } else { $display = $row['author_id']; } ?> <tr> <td><?php echo $display; ?></td> <td><?php echo $row['author_book']; ?></td> <td><?php echo $row['rating']; ?></td> </tr> <?php $author = $row['author_id']; } ?>
Вы должны разделить свой код на две отдельные части: извлечение и вывод данных из извлеченных данных. Допустим, вы должны группировать полученные данные с 'author_id'
ключа 'author_id'
.
Ну вот как то так:
<table> <tr><td>Author ID</td><td>Author Book</td><td>Rating</td></tr> <?php $result = array(); $row_data = mysql_query("select * from author_master" ); while($row = mysql_fetch_array($row_data) ) { $id = $row['author_id']; if (!isset($result[$id])) $result[$id] = array('author_book' => array(), 'rating' => array()); array_push($result[$id]['author_book'], $row['author_book']); array_push($result[$id]['rating'], $row['rating']); } foreach ($result as $id => $data) { ?> <tr> <td><?php echo $id; ?></td> <td><?php echo implode('<br>', $data['author_book']); ?></td> <td><?php echo implode('<br>', $data['rating']); ?></td> </tr> <?php } ?> </table>
Просто проверьте на изменение стоимости: –
<?php $prev_author_id = null; ?> <table> <tr><td>Author ID</td><td>Author Book</td><td>Rating</td></tr> <?php $row_data = mysql_query("SELECT * FROM author_master ORDER BY author_id author_book" ); while($row = mysql_fetch_array($row_data) ) { echo "<tr>"; echo "<td>".(($prev_author_id != $row['author_id']) ? $row['author_id'] : ' '."</td>"; echo "<td>".$row['author_book']."</td>"; echo "<td>".$row['rating']."</td>"; echo "</tr>"; $prev_author_id = $row['author_id']; } ?> </table>
Пока упорядоченные строки упорядочены, это позволяет сохранить потенциально большой объем данных перед его выпуском.