2011-02-15 68 views
0
**categories** mysql table 
id|category_name 

**listings** mysql table 
id|listing_title|category_id 

我想列出1個單一/相同PHP頁面上的所有類別,並在每個類別下方顯示所有列表。我該如何通過查詢列表表一次來做到這一點。我可以通過在類別循環中做一個單獨的查詢來做到這一點,但那會比我猜測的更有必要。查詢MySQL表格一次以獲取所有類別的所有列表

 

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

下面是一個簡單的(類別名稱,人數)

$ sql_code =「SELECT C.category_name cat_name,FROM C類L.listing_title列表,列表L,其中C.id = L.category_id ORDER BY C.分類名稱」;

$ next_catname =「」;

而($行= mysql_fetch_array($ SQL,MYSQL_ASSOC)){
如果(的strcmp($ next_catname,$行[catname])< 0)
{
如果(strlen的($ next_catname)> 0 )
{print「< \」>:}
print「Category:」。 $ row [catname]。 「< \」;「
} print「$ row [catname]:$ row [listings] < \」>; }

這是一個奇特的一個(類別名稱隨着人數的逗號分隔的列表)

$ sql_code =「SELECT C.category_name cat_name,GROUP_CONCAT(L.listing_title)上市FROM類別C,上市大號WHERE C.id = L.category_id GROUP BY C.category_name「;

$ sql = mysql_query($ sql_code,$ conn);

而($行= mysql_fetch_array($ SQL,MYSQL_ASSOC)){
打印 「分類:$行[catname] < \ BR>編目:$行[表] < \ BR> < \ BR>」;
}

,或者你可能會爆炸$行[上市]用「」和一個

打印出來一個有這一個樂趣!

+0

謝謝。怪異的一個作品! – SomeRandomDude 2011-02-15 10:02:13

0

你有沒有想過

select * from categories, listings 
where categories.id = listings.category_id 
order by categories.name, categories.id, listings.listing_title, listings.id 

則不必通過的電流類別是否在以前的類別相匹配的列表保持跟蹤的PHP代碼迴路?