按PHP分类列出项目

can*_*era 0 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;
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道如何编写PHP脚本来列出每个类别标题下的书籍.

我知道足以将结果集合成一个数组,但后来我很难使用该数组来分组项目,如图所示.

另一个Stack问题解决了几乎相同的问题,但是响应没有解决PHP代码:按类别列出项目

谢谢!

Ada*_*nco 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";
}
Run Code Online (Sandbox Code Playgroud)


jon*_*tar 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
Run Code Online (Sandbox Code Playgroud)

然后为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 />';
}
Run Code Online (Sandbox Code Playgroud)

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