Список элементов по категориям в PHP - PullRequest
0 голосов
/ 06 мая 2011

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

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

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

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

JQuery
Поваренная книга jQuery
Изучение 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-скрипт для вывода списка книг под заголовком каждой категории.

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

Еще один вопрос стека касается почти того же, но ответы не решают проблему с кодом PHP: Элементы списка по категориям

Спасибо!

Ответы [ 2 ]

6 голосов
/ 06 мая 2011

Добавьте в запрос предложение 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";
}
5 голосов
/ 06 мая 2011

Упорядочить результаты по категориям, а затем просто выполнить итерацию, помещая заголовок категории при каждом изменении имени категории.

Упорядочение проще всего выполнить в запросе 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 />';
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...