查询MySQL表一次以获取所有类别的所有列表

时间:2011-02-15 05:35:10

标签: php

**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

}

2 个答案:

答案 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代码循环遍历列表,跟踪当前类别是否与之前的类别匹配?