有人可以帮我按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
谢谢!
答案 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 />';
}
您不需要先将所有结果放入数组中。您可以随时取出它们。