Php MySQL连接-循环所有类别和输出项

Php MySQL连接-循环所有类别和输出项,php,mysql,sql,join,Php,Mysql,Sql,Join,我的桌子: 类别: 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

我的桌子:

类别:

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 ...
    }
}
使用JOIN?我可以这样做:

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 ...
    }
}

但是,正如您所知,这是一种可怕的方法,永远不应该这样做。

确实,使用联接,然后按类别排序。在PHP中,您只需检查类别是否已更改为下一个类别,如果已更改,则显示一个漂亮的表标题(代码待定)

另外,您真的不应该再使用mysql扩展了。它已被弃用。相反,您应该使用MySQLi或PDO扩展

$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);

NBmysql_*已被弃用。。。使用mysqli_*或pdo

谢谢!我知道。。。我只是把这段代码放在一起演示我在做什么:)