GROUP BY 一列但不是同一表中的另一列-SQL [重复]
Posted
技术标签:
【中文标题】GROUP BY 一列但不是同一表中的另一列-SQL [重复]【英文标题】:GROUP BY one column but not the other column within same table - SQL [duplicate] 【发布时间】:2021-05-21 05:54:19 【问题描述】:我有一个名为“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 *** 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列。希望我说得通
您写了“结果如下:”。查询不可能导致您显示的内容。
【参考方案1】:
它可以通过不同的方法来完成,但如果你想通过你的 php 代码来完成,那么你应该执行一个查询,在其中你将只得到部门
select departments from department_categories group by departments
并在 while 循环中传递此查询并仅获取变量中的部门
$department = row['departments'];
然后在while循环中调用另一个查询来获取类别
select * from department_categories where department = $department
$query = "select * from department_categories group by departments;
$result = mysqli_query($query);
while($row = mysqli_fetch_array($result))
$department = $row['departments'];
$category_query = "select * from departments where department = $departments";
$result_categories = mysqli_query($category_query);
while($row_category = mysqli_fetch_array($result_categories))
echo $row_category['category'];
【讨论】:
您在$category_query
中缺少$departments
周围的引号。最好使用准备好的语句。
$query
应该是SELECT DISTINCT department FROM department_categories
他使用的是 PDO,而不是 mysqli。以上是关于GROUP BY 一列但不是同一表中的另一列-SQL [重复]的主要内容,如果未能解决你的问题,请参考以下文章