使用PHP循环MySQL中的列字段


Looping through column fields in MySQL with PHP

我正在网页上构建食物菜单。这份菜单包括葡萄酒和啤酒等饮料。目前,它们按红葡萄酒或白葡萄酒和葡萄酒类型(灰皮诺、霞多丽等)进行分类

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语句的所有尝试都会导致错误,我不知道下一步该怎么做。

我怎样才能做到这一点?

  1. 好的方法是不要简单地使用"*",而是使用列列表(原因:只选择真正想使用的数据-更好的性能,其次,如果你以后想在表中添加或更改列,那么你的生活会更简单;-)

  2. 我认为你可以尝试,从小表格中选择所有数据,只对数据类型和名称进行排序,然后在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>";
}