首页 > 解决方案 > 从 mysql 中获取数据并在类别下分组

问题描述

我用这种结构从数据库中获取数据

Cars   | Category   | 1Days |   3 Days  
-------|--------------|------–--|---------––
Car1   |  Off Road  | 50.00 | 90,00  
Car2   |  Off Road  | 50.00 | 90,00  
Car3   |  Minivan   | 50.00 | 90,00  

我想把它改成

Off Road
Cars   | 1Days |    3 Days  
-------|----------|---––
Car1   |  50.00 | 90,00  
Car2   |   50.00 | 90,00  
Minivan
 Cars   | 1Days |   3 Days  
-------|----------|---––
Car3   |  50.00 | 90,00  

我想在类别下对表格进行分组

谢谢你提前

标签: phpmysql

解决方案


您可能必须从 PHP 表示层处理此问题。这是一种方法:

$sql = "SELECT * FROM yourTable ORDER BY category, cars";
$result = $conn->query($sql);
$category = NULL;

echo "<table colspan=\"3\">";

if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        if ($category != $row["category"]) {
            echo "<tr><td colspan=\"3\">" . $row["category"] . "</tr>";
            echo "<tr><td>Cars</td><td>1 Days</td><td>3 Days</td></tr>";
            $category = $row["category"];
        }
        echo "<tr>";
        echo "<td>" . $row["cars"] . "</td>";
        echo "<td>" . $row["1days"] . "</td>";
        echo "<td>" . $row["3days"] . "</td>";
        echo "</tr>";
    }
    echo "</table>";
}

上面的代码使用逻辑,在结果集中看到一个尚未看到的类别时,将打印两个标题行。第一个标题行只包含类别,第二个包含表中三列的标题。

这里的一个重要注意事项是,我们ORDER BY category, cars在 MySQL 查询中使用在结果集数据中强加我们想要的顺序。如果不使用ORDER BY,我们的方法可能行不通。


推荐阅读