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

时间:2017-01-09 17:05:54

标签: php mysql sql

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

无论如何,我有一个食物菜单项目数据库,所有菜单项目分为Starter,Main,Dessert等。

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

首发

  • 佩特
  • 另一个初学者......

电网

  • 牛排
  • Fish&芯片
  • 其他美味的东西

甜点心

  • 你明白了......

到目前为止,我已经有了一个表格,其中包含使用a 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等,但我似乎可以找出最好的方法,而不会让事情变得复杂......

非常感谢任何正确方向的指示

提前干杯, 标记

1 个答案:

答案 0 :(得分:0)

您可以保留当前的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>';
    }
}

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