我有两张桌子:
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'];
}
}
答案 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
一次。如果您能够像这样撤回一个结果集中的categoryName
和menuname
项:
| categoryName | menuname |
---------------------------
| category1 | menu1 |
| category1 | menu2 |
| category1 | menu3 |
| category2 | menu4 |
在迭代结果时,您需要手动检查categoryName
何时更改,以便为该组menuname
项打印一次。