按PHP分类列出项目

时间:2011-05-06 01:28:22

标签: php list categories

有人可以帮我按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代码:List items by category

谢谢!

2 个答案:

答案 0 :(得分:6)

在查询中添加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";
}

答案 1 :(得分:5)

按类别排序结果,然后只需通过迭代,只要类别名称发生变化就会放置一个类别标题。

在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 />';
}

您不需要先将所有结果放入数组中。您可以随时取出它们。