我有一个名为“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; ?>
任何帮助将不胜感激。谢谢
答案 0 :(得分:0)
它可以通过不同的方法来完成,但是如果你想通过你的 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'];
}
}