php - 将具有相同值的 SQL 行分组并添加组标题

标签 php mysql sql

我到处寻找这个问题的答案,但我发现的一切似乎都太复杂了......开始认为我找不到它,因为它太简单了!

无论如何,我有一个食物菜单项的数据库,所有这些都被分类为开胃菜、主菜、甜点等。

我可以输出按类别排序的所有项目(首先是开胃菜,然后是主菜,然后是甜点),但我想在每个组的顶部添加一个标题,这样它们看起来更像这样......

入门

  • 佩特
  • 另一个入门者...

电源

  • 牛排
  • 炸鱼薯条
  • 其他美味的东西

甜点

  • 你明白了...

到目前为止,我已经得到了一个包含食物项的表,该表与带有 course_id 的表相连,并且以下 SQL 生成一个有序列表,但没有标题

$sql = "
        SELECT * 
        FROM food_items 

        INNER JOIN course_id
            ON food_items.course = course_id.course

        ORDER BY course_id
        ";

然后我就得到了 PHP...

$result = $con->query($sql);        
if ($result->num_rows > 0) {        
while($row = $result->fetch_assoc())
echo '<p class="menuItem">' . $row["item"] . ' - £' . $row["price"] . '</p>';
};

我读过有关 ROLLUP、GROUP BY、ORDER BY 等的内容,但我似乎可以找出最好的方法,而不会使事情过于复杂......

任何正确方向的指针将不胜感激

提前干杯, 标记

最佳答案

您可以保持当前的 PHP 代码不变,并稍加修改。您需要添加一个变量来跟踪当前类别,并在其更改时写出一个新变量:

$result = $con->query($sql);        
if ($result->num_rows > 0) {        
    $curCategory = '';
    while($row = $result->fetch_assoc())
    {
        if($curCategory != $row["category"])
        {
            $curCategory = $row["category"];
            echo '<p class="menuCategory"><strong>' . $curCategory . '</strong></p>';
        }
        echo '<p class="menuItem">' . $row["item"] . ' - £' . $row["price"] . '</p>';
    }
}

当然,您需要确保查询结果集进行相应排序。

关于php - 将具有相同值的 SQL 行分组并添加组标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41553188/

相关文章:

PHP/MySQL 性能

MySQL SELECT 多个 DISTINCT COUNT

mysql - 选择要删除哪个重复行?

java - 使用 Antlr4 的翻译器

asp.net - 通过长轮询检查数据库的变化

php - 在 PHP 中对具有特殊字符的数组进行排序

php 和 js//csv 到表(带有附加内容)到 csv

php - 使用 PHP 的 preg_match 来查看某个值是否与值列表匹配

mysql - 问 :Bookshelf. js :How to query by bookshelfjs?

mysql - 如果它们具有相同的元素,则从一个表中合并组