2014-02-09 54 views
1

我的表:MySQL的加入 - 遍歷所有類別和輸出項目

分類:

id (int) 
name (varchar) 

項目:

id (int) 
name (varchar) 
category (int) 

是否可以使用輸出這樣的數據:

Category1 
--------- 
Item1 
Item2 

Category2 
--------- 
Item3 
Item4 

使用加入?我能做到這一點是這樣的:

$query = mysql_query("SELECT id, name FROM categories"); 

while ($row = mysql_fetch_assoc($query)) 
{ 
    echo $row["name"]; 

    $query2 = mysql_query("SELECT * FROM dishes WHERE category = {$row["id"]}"); 

    while ($row2 = mysql_fetch_assoc($query2)) 
    { 
     echo ... 
    } 
} 

然而,正如你可能知道,這是做這個可怕的方式,它不應該做。

+0

第一步。請參閱JOIN。 – Strawberry

回答

1

確實,使用JOIN,然後按類別排序。裏面你的PHP你剛纔檢查類別已經改變到下一個,如果是這樣,展現出不錯的表頭(代碼待定)

$q = mysql_query("SELECT dishes.id, dishes.name, categories.name as catname, categories.id as catid FROM dishes LEFT JOIN categories ON (dishes.category=categories.id) ORDER BY categories.name ASC"); 

$currCat = 0; 
while($dish = mysql_fetch_array($q)) { 
    if($currCat != $dish['catid']) { 
     echo 'Category: ' . $dish['catname']; 
     $currCat = $dish['catid']; 
    } 
    echo $dish['name']; 
} 

mysql_free_result($q); 

在一個旁註,你真的不應該再使用mysql擴展。已棄用。相反,您應該使用MySQLi或PDO擴展。

+0

謝謝!我知道......我只是把這段代碼放在一起來展示我在做什麼:) – user3289411

1
$SQL = "SELECT c.name, d.* 
     FROM categories AS c 
     JOIN dishes AS d ON (d.category = c.id) 
     ORDER BY c.name ASC"; 

$result = mysql_query($SQL) or die (mysql_error()); 

$oldCategory = null; 

while ($row = mysql_fetch_assoc($result)) 
{ 
    if($oldCategory != $row["name"]) 
    { 
     echo $row["name"]; 

     $oldCategory = $row["name"]; 
    } 

    print_r($row); 
} 

mysql_free_result($result); 

NB mysql_ *已被棄用...使用mysqli_ *或PDO!

+0

非常感謝! – user3289411