Список элементов по категориям в PHP

Может ли кто-нибудь помочь мне с перечислением предметов по категориям на PHP?

Я пытаюсь создать простой список книг по категориям:

JavaScript
Шаблоны JavaScript
Объектно-ориентированный JavaScript

Ajax
Полное руководство Ajax
Пуленепробиваемый Ajax

JQuery
jQuery Cookbook
Изучение jQuery 1.3

У меня нет проблем с структурой данных или SQL-запросом:

BOOK: book_id, book_title, fk_category_id CATEGORY: category_id, category_name SELECT category.category_name, book.book_title FROM category LEFT OUTER JOIN book ON category.category_id = book.fk_category_id; 

Моя проблема в том, что я не знаю, как написать скрипт PHP, чтобы перечислить книги под каждым заголовком категории.

Я знаю достаточно, чтобы получить результирующий набор в массив, но затем я сфокусирован на использовании этого массива для группировки элементов, как показано.

Еще один вопрос с Stack затрагивает почти одно и то же, но ответы не позволяют решить PHP-код: Список элементов по категориям

Благодаря!

Добавьте предложение ORDER BY category.category_name в ваш запрос, чтобы при прохождении через результирующие строки элементы в каждой категории были сгруппированы. Затем, каждый раз, когда категория отличается от предыдущей, вы просматриваете категорию как заголовок перед печатью названия.

 $category = null; foreach ($rows as $row) { if ($row['category_name'] != $category) { $category = $row['category_name']; print "<h1>".$category."</h1>\n"; } print $row['book_title']."<br/>\n"; } 

Заказывайте результаты по категориям, а затем просто перебирайте их, помещая заголовок категории всякий раз, когда изменяется название категории.

Заказ проще всего выполнить в SQL-запросе. Вам даже не нужен промежуточный массив.

 SELECT category.category_name, book.book_title FROM category LEFT OUTER JOIN book ON category.category_id = book.fk_category_id ORDER BY category.category_name 

А затем для PHP

 $res = mysql_query($query); $lastCategory = ''; while ($row = mysql_fetch_assoc($res)) { if($row['category_name'] != $lastCategory) { $lastCategory = $row['category_name']; echo "<br /><strong>$lastCategory</strong>"; } echo $row['book_title'] . ' <br />'; } 

Вам не нужно сначала вводить все результаты в массив. Вы можете просто принести их, когда идете.