我正在网页上构建食物菜单。这份菜单包括葡萄酒和啤酒等饮料。目前,它们按红葡萄酒或白葡萄酒和葡萄酒类型(灰皮诺、霞多丽等)进行分类
id(int)、名称(varchar)、类型(varchar
我当前的代码:
$result = mysql_query("SELECT * FROM Wines WHERE type = 'Pinot Grigio' ");
while($row = mysql_fetch_array($result)) {
$name = $row['name'];
$type = $row['type'];
$price_bottle = $row['price_bottle'];
$price_glass = $row['price_glass'];
echo
"<div class='foodmenu-item'>
<div class='foodmenu-text'>
<h2>" . $type . "</h2>
<p>" . $name . "</p>
</div>
<div class='foodmenu-price'>
<p>$" . $price_bottle . " / " . $price_glass . "</p>
</div>
</div>";
}
如果我想单独显示每一项,这很好,但我想按葡萄酒的"类型"(灰皮诺、霞多丽等)分组,然后在该"类型"下列出葡萄酒的每个名称,这样我的CSS看起来整洁有序。
例如:
PINOT GRIGIO
Nobllissimo
步枪
CHARDONNAY
破碎机
转向架
使用"GROUP BY"SQL语法只显示我当前代码的第一个结果。我做foreach语句的所有尝试都会导致错误,我不知道下一步该怎么做。
我怎样才能做到这一点?
-
好的方法是不要简单地使用"*",而是使用列列表(原因:只选择真正想使用的数据-更好的性能,其次,如果你以后想在表中添加或更改列,那么你的生活会更简单;-)
-
我认为你可以尝试,从小表格中选择所有数据,只对数据类型和名称进行排序,然后在while cycle中为菜单分组。然后只需要将一个查询发送到数据库并拥有所有查询。假设Wines只是一个小表,因为全选会消耗内存。
选择类型、名称、price_bottle、price_glassFROM葡萄酒ORDER BY类型、名称;
您是否尝试过使用嵌套的2个查询?像这样:
$result = mysql_query("SELECT DISTINCT(type) FROM Wines ORDER BY type");
while($row = mysql_fetch_array($result)) {
$type = $row['type'];
echo "<div class='foodmenu-item'>
<h2>" . $type . "</h2>";
$result2 = mysql_query("SELECT * FROM Wines WHERE type = '".type."' ");
while($row2 = mysql_fetch_array($result2)) {
$name = $row2['name'];
$price_bottle = $row2['price_bottle'];
$price_glass = $row2['price_glass'];
echo "
<div class='foodmenu-text'>
<p>" . $name . "</p>
</div>
<div class='foodmenu-price'>
<p>$" . $price_bottle . " / " . $price_glass . "</p>
</div>";
}
echo "</div>";
}