**categories** mysql table
id|category_name
**listings** mysql table
id|listing_title|category_id
我想列出1个/同一个PHP页面上的所有类别,每个类别下面都显示了所有列表。我怎么能通过查询列表表ONCE来做到这一点。我可以通过在类别循环中进行单独的查询来实现,但这不仅仅是我猜测的。
//query listings table once
$sql = mysql_query("SELECT * FROM listings", $conn);
//loop through all categories
$sql = mysql_query("SELECT * FROM categories ORDER BY catname", $conn);
while($row= mysql_fetch_array( $sql, MYSQL_ASSOC )){
//print category name
print"$row[catname]";
//print listings of category
}
答案 0 :(得分:2)
这是一个简单的(类别名称,列表)
$ sql_code =“SELECT C.category_name cat_name,L.listing_title listing FROM categories C,listing L WHERE C.id = L.category_id ORDER BY C.category_name”;
$ next_catname = “”;
while($ row = mysql_fetch_array($ sql,MYSQL_ASSOC)){
if(strcmp($ next_catname,$ row [catname])< 0)
{
if(strlen($ next_catname)> 0)
{print“< \ BR>”:}
打印“类别:”。 $ row [catname]。 “< \&BR gt;” 中;
}
打印“$ row [catname]:$ row [listings]< \ BR>”;
}
这是一个怪异的(类别名称以及逗号分隔的列表清单)
$ sql_code =“SELECT C.category_name cat_name,GROUP_CONCAT(L.listing_title)listing FROM categories C,listing L WHERE C.id = L.category_id GROUP BY C.category_name”;
$ sql = mysql_query($ sql_code,$ conn);
while($ row = mysql_fetch_array($ sql,MYSQL_ASSOC)){
打印“类别:$ row [catname]< \ BR>列表:$ row [listing]< \ BR>< \ BR>”;
}
或者您可以通过','爆炸$ row [listing]并逐个打印
玩这个玩得开心!!!
答案 1 :(得分:0)
select * from categories, listings
where categories.id = listings.category_id
order by categories.name, categories.id, listings.listing_title, listings.id
然后让PHP代码循环遍历列表,跟踪当前类别是否与之前的类别匹配?