GROUP BY 一列而不是同一表中的另一列 - SQL

时间:2021-02-18 09:40:51

标签: php sql group-by

我有一个名为“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; ?>

任何帮助将不胜感激。谢谢

1 个答案:

答案 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'];
    }

}
相关问题