我正在尝试创建一个按菜单类型 (div_id) 和项目类型 (grp_id) 划分的菜单页面,并显示项目信息:标题、描述、价格等。虽然每个 grp_id 都应该在它是自己的 html 表(例如,“啤酒 - 瓶装”所有项目列在一张表中,“啤酒 - 草案”在另一张表中)。此外,每个菜单(例如 Beverages、Salads 等)都应该在一个单独的手风琴窗口中:
饮料
啤酒 - 瓶装
Killian's : $4.75
Molson : $4.75
Peroni : $6.00
啤酒 - 草案
吉尼斯:5.50 美元
酒红色的
Banfi,“Colle di Sasso”,意大利:15.75 美元
Bell'agio,基安蒂,意大利:16.95 美元
酒 - 白
Beringer,莫斯卡托,加利福尼亚:14.95 美元
普拉西多,灰比诺,意大利:14.95 美元
沙拉
开胃菜沙拉:$6.25
烤鸡肉沙拉:$7.95
Mesclun Side Salad:$4.95
等等...
数据在 MYSQL 表中:
列类型 Null 默认值
menu_id int(10) 否
div_id int(10) 否
grp_id int(10) 是 NULL
cat_id int(10) 是 NULL
date_b date 否
date_e date 否
price float(6,2) 是 NULL
price2 float(6,2) 是 NULL
price3 float(6,2) 是 NULL
title varchar(255) 否
descr text 是 NULL
特殊 enum('n', 'y') 否 n
ordr int(4) 否 10
div_id、grp_id 和 cat_id 是外键,其表包含菜单类型 (div_id)(div_name) 和项目类型 (grp_id)(grp_name)。
为了做到这一点,我已经像这样查询了数据库:
$query_listMenu = sprintf("SELECT menu.menu_id, menu.div_id, m_div.div_name, menu.grp_id, m_grp.grp_name, menu.cat_id, m_cat.cat_name, m_cat.cat_ord, menu.title, menu.descr, menu.price, menu.price2, menu.price3, menu.date_b, menu.date_e
FROM menu
LEFT JOIN m_div ON ( menu.div_id = m_div.div_id )
LEFT JOIN m_grp ON ( menu.grp_id = m_grp.grp_id )
LEFT JOIN m_cat ON ( menu.cat_id = m_cat.cat_id )
WHERE menu.date_e >= NOW()
ORDER BY m_div.div_name, ordr, m_grp.grp_name, menu.title");
将结果转储到多维数组中$menuRows
$listMenu = mysql_query($query_listMenu, $siteuser);
while ( $row = mysql_fetch_array($listMenu, MYSQL_ASSOC) )
{
$menuRows[] = $row;
}
这是我用来遍历数组并显示内容的代码,但它无法正常工作:
foreach ($menuRows as $section => $type) {
echo "<h3>" . $type['div_name'] . "</h3>";
echo "<table>";
echo "<tr><th>" . $type['grp_name'] . "</th><th> </th><th> </th><th> </th></tr>";
foreach ($menuRows as $menu => $item) {
if ($item['div_name'] == $type['div_name']) {
echo "<tr><td><strong>" . $item['title'] . "</strong>" . $item['descr'] . "</td><td>" . $item['price'] . "</td><td>" . $item['price2'] . "</td><td>" . $item['price3'] . "</td></tr>";
}
} echo '</table>';
}
问题是每个菜单的重复次数与类别中的项目一样多。例如,饮料有 8 个项目,因此饮料部分重复 8 次。每个类别条目的重复次数等于该类别中的项目数。这显然是嵌套 foreach 函数的结果,但我无法找出正确的代码。
此外,显示的代码不会根据 grp_name 进行过滤,因此所有饮料都以一个 html 表格结束,啤酒和葡萄酒。虽然 Wine - red 将有自己的桌子,就像 Beer - Draft 一样,但所有饮料都会在每个桌子上重复。
任何帮助将非常感激。