Может ли кто-нибудь помочь мне с перечислением предметов по категориям на 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 />'; }
Вам не нужно сначала вводить все результаты в массив. Вы можете просто принести их, когда идете.