0

我有 2 张桌子:

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'];
    }
}
4

1 回答 1

0

如上所述,我不确定“在每个 categoryName 之后显示 5 个菜单名”是什么意思。

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

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字段分组以确保每个项目仅返回一次:

$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为每组菜单项打印一次。如果您能够像这样在一个结果集中拉回categoryName和项目:menuname

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

在遍历结果时,您需要手动检查categoryName更改的时间,以便为该组menuname项目打印一次。

于 2012-05-01T08:03:20.117 回答