如何制作记录集(类别和子类别)

时间:2012-05-01 07:52:41

标签: php mysql sql

我有两张桌子:

categories (id, categoryName)menu (id, menuname, category_id)

我想显示所有类别,其中包含menu中的一个或多个记录。 每次categoryName后显示5 menuname

是否可以在一个记录集中执行此操作?

谢谢!

这是我的2个记录集:

$query = "select a.id, a.name from categories as a where a.id in (select count(*) from menu as b on b.category_id = a.id)";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
    echo $row['name'];
    $category_id = intval($row['id']);
    $query = "select menuname from menu where category_id = $category_id limit 0, 5";
    $resultmenu = mysql_query($query);
    while ($rowmenu = mysql_fetch_array($resultmenu)) {
        echo $rowmenu['menuname'];
    }
}

1 个答案:

答案 0 :(得分:0)

如上所述,我不确定" 是什么意思,并且在每个categoryName之后显示5个menuname "。

但是要按字母顺序显示所有类别/菜单名称的列表,您可以使用以下内容:

SELECT      C.categoryName,
            M.menuname
FROM        categories C
INNER JOIN  menu M ON M.category_id = C.id
ORDER BY    C.categoryName,
            M.menuname

<强>更新

目前,您的第一个查询只会返回一行。子查询当前正在计算menu行的数量,然后该数字用于从类别表中提取一行,这不是您想要的。

以下查询连接到menu表以确保至少存在一个项目,然后按category字段分组以确保每个项目仅返回一次:<​​/ p>

$query = "select a.id, a.name from categories as a inner join menu as b on b.category_id = a.id group by a.id, a.name"

更新2

对不起,我现在明白了。不,我不认为在单个查询中实现您想要的功能是可能的。即使有可能我也不推荐它。查看代码,您只想为每组菜单项打印categoryName一次。如果您能够像这样撤回一个结果集中的categoryNamemenuname项:

| categoryName | menuname |
---------------------------
| category1    | menu1    |
| category1    | menu2    |
| category1    | menu3    |
| category2    | menu4    |

在迭代结果时,您需要手动检查categoryName何时更改,以便为该组menuname项打印一次。