【发布时间】:2023-03-09 19:52:01
【问题描述】:
我有一个名为“department_categories”的表,其中包含 3 列“id”、“category”和“department”:
id | category | department
1 | chainsaw | garden and home
2 | jet-ski | lifestyle
3 | generator | garden and home
4 | tractor | agriculture
5 | rtv | lifestyle
现在我想要实现的是显示每个部门内的所有类别。以下查询
$sql = "SELECT category, department FROM department_categories GROUP BY department
结果如下:
garden and home | lifestyle | agriculture
| |
chainsaw | jet-ski | tractor
这很有意义,因为 GROUP BY 根据指定的列对所有行进行分组。但是我正在寻找的结果是:
garden and home | lifestyle | agriculture
| |
chainsaw | jet-ski | tractor
generator | rtv
我遇到了following stackoverflow question。这似乎是我遇到的类似问题,但我无法解决它。
为了更清楚,这是我正在使用的完整脚本:
<?php
$host = "localhost";
$username = "root";
$password = "";
$dbname = "auro-rudamans";
$dsn = "mysql:host=$host;dbname=$dbname";
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
$connection = new PDO($dsn, $username, $password, $options)
try {
$sql = "SELECT category, department FROM department_categories GROUP BY department";
$statement = $connection->prepare($sql);
$statement->execute();
$result = $statement->fetchAll();
}
catch(PDOException $error) {
echo $sql . "<br>" . $error->getMessage();
};
?>
<?php foreach ($result as $row) : ?>
<ul>
<h1><?php echo $row['department']; ?></h1>
<li><?php echo $row['category']; ?></li>
</ul>
<?php endforeach; ?>
任何帮助将不胜感激。谢谢
【问题讨论】:
-
您的第一个查询无法产生您显示的结果。您只选择 2 列,如何在输出中获得 3 列?
-
并且查询不能在不同的行中返回不同数量的列。使用
GROUP_CONCAT()将所有类别收集到一个分隔字符串中。 -
可以使用
GROUP_CONCAT()MySQL函数 -
@Barmar 感谢您的回复。我知道只有 2 列。查看部门列有 3 个不同的值(花园、生活方式、农业)和其他列类别。换句话说,我只想列出每个部门一次,然后在每个部门下列出相关部门下的类别。使用 GROUP BY 我得到了我正在寻找的结果,但它只显示每个部门的 1 个类别,而不是显示一个部门的所有类别。所以输出仍然是2列。希望我说得通
-
您写了“结果如下:”。查询不可能导致您显示的内容。