您可能需要从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
,我们的方法可能行不通。