php - 使用 SQL 对表中的数据进行分类/分组

标签 php mysql sql

我已将特定文件的物理位置存储在我的数据库中,并带有下载计数器,以便通过较短的 URL(如 /Download/a4s)提供下载。每个文件都有一个通过外键分配的 categoryId,它只是描述了它属于哪个类(class)/讲座,以便于浏览。 fileCategories 表基本上是这样的

categoryId | categoryName
---------------------------
         1 | Lecture 1
         2 | Lecture 2
         3 | Personal Stuff

假设我有一个 files 表,看起来像这样,还有一些我省略的其他列

fileId | categoryId | filePath     | ...
----------------------------------------
     1 |          1 | /Foo/Bar.pdf | ...
     2 |          1 | /Foo/Baz.pdf | ...
     3 |          2 | /Bar/Foo.pdf | ...
     4 |          2 | /Baz/Foo.pdf | ...
     5 |          3 | /Bar/Baz.pdf | ...

我创建了一个页面,该页面应显示有关这些文件的一些数据并按类别对它们进行分组,从而生成一个非常简单的 html 表格,如下所示:

Id | Path         | ...
-----------------------
Lecture 1
-----------------------
 1 | /Foo/Bar.pdf | ...
 2 | /Foo/Baz.pdf | ...
-----------------------
Lecture 2
-----------------------
 3 | /Bar/Foo.pdf | ...
 4 | /Baz/Foo.pdf | ...
-----------------------
Personal Stuff
-----------------------
 5 | /Bar/Baz.pdf | ...

到目前为止,我使用多个 SQL 查询来获取和存储 PHP 数组中的所有类别,并在遍历 files 表时将文件条目附加到这些数组。即使文件数量很少,这也不太可能是最好的方法。我想知道是否有一个查询会自动将这些条目分类到临时表中(只是自发猜测使用这些表),我可以输出这些临时表以大大改进我当前获取数据的方式。

最佳答案

您不能仅使用 mysql 而是结合使用 JOIN 和一些 PHP。

SELECT * FROM files f LEFT JOIN fileCategories c USING (categoryId) ORDER BY c.categoryName ASC

请务必先按类别(名称或 ID)排序,然后可选地按其他参数排序,以允许以下代码示例按预期工作。

然后在 PHP 中迭代结果,记住每一行的类别 ID,如果它发生变化,您可以输出类别分隔符。假设查询结果存储在$dbRes

示例代码:

$lastCategoryId = null;
while ($row = $dbRes->fetchRow()) {
    if ($lastCategoryId !== $row['categoryId']) {
        echo "--------------------" . PHP_EOL;
        echo $row['categoryName'] . PHP_EOL
        echo "--------------------" . PHP_EOL;
    }

    echo $row['filePath'] . PHP_EOL;
    $lastCategoryId = $row['categoryId'];
}

关于php - 使用 SQL 对表中的数据进行分类/分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33258827/

相关文章:

php - 如何检索mysql数据并将其显示在html中

php - 此应用程序中的不安全内容错误

php - MySQL PHP - 比较字符串日期

Mysql str替换空格问题

php - SQL - 插入数据,其中值是数组

php - Ajax 成功 jquery php

mysql - 如何在 Windows 上的 Neo4j 中导入 MySQL 数据库?

mysql - 在表 JOIN 期间实际发生了什么?

php - 在 MySQL 中使用子查询进行选择

java - RDBMSLoginModule : ClassCastException com. ibm.ws.jdbc.DataSourceService 到 javax.sql.DataSource