我正在网页上建立食物菜单。这个菜单包括葡萄酒和啤酒等饮品。目前,它们按红色或白色和葡萄酒的类型(Pinot Grigio,Chardonnay等)分类。我已将这些葡萄酒项目输入MySQL数据库,其中包含以下列/值:
id(int),name(varchar),type(varchar),price_bottle(decimal),price_glass(decimal),red(bool)
我的当前代码:
$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>";
}
如果我想单独展示每个项目,但我想按“葡萄酒类型”(Pinot Grigio,Chardonnay等)进行分组,然后在“类型”下列出葡萄酒的每个名称,那么这很好我的CSS看起来整洁有序。
例如:
PINOT GRIGIO
Nobllissimo
里夫
CHARDONNAY
破碎机
博格
使用“GROUP BY”SQL语法仅显示当前代码的第一个结果。我做出foreach语句的所有尝试都会导致错误,我不知道下一步该转向何处。
我怎样才能做到这一点?
答案 0 :(得分:0)
好的方式不是简单地使用&#34; *&#34;,而是列表 (原因:只选择真正想要使用的数据 - 性能更好,如果你以后想要在表格中添加或更改列,那么你的生活会更简单;-))
我认为你可以尝试,从小表中选择所有,只对数据进行排序 - 类型和名称,然后在循环中对菜单的类型进行分组。然后,您只需要向数据库发送一个查询并拥有所有这些查询。假设Wines只是小表,因为select都消耗了一个内存。
SELECT type,name,price_bottle,price_glass 来自葡萄酒 ORDER BY类型,名称;
答案 1 :(得分:-1)
您是否尝试使用嵌套的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>";
}