【问题标题】:Group SQL rows with same value and add group headings将具有相同值的 SQL 行分组并添加组标题
【发布时间】:2017-01-09 17:05:54
【问题描述】:

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

不管怎样,我有一个食物菜单项目的数据库,所有这些都被归类为开胃菜、主菜、甜点等。

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

初学者

  • 汤
  • 佩特
  • 另一个开胃菜...

电源

  • 牛排
  • 炸鱼薯条
  • 其他好吃的东西

甜点

  • 你懂的……

到目前为止,我已经有一个包含食品项目的表格,该表格与带有 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 mysql sql


    【解决方案1】:

    您可以保持当前的 PHP 代码不变,只需稍作修改。您需要添加一个变量来跟踪当前的category,并在它发生变化时写出一个新变量:

    $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 新手!再次感谢,非常感谢
    猜你喜欢
    • 2019-05-10
    • 2023-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多