php - 按字段对行进行分组

标签 php mysql sql

我有以下表结构:

+------------------------+
| id |  name  | category |
+------------------------+
|  1 | name_1 |    cat_1 |
|  2 | name_2 |    cat_2 |
|  3 | name_3 |    cat_1 |
|  . |   .    |      .   |
|  . |   .    |      .   |
|  n | name_n |    cat_k |
+------------------------+

其中“n”是表的总行数,“k”是任意数字。我的问题是,有没有办法进行 SQL 查询来检索按类别分组的行?我的意思是有可能得到类似这样的结构吗?

array(
    "cat_1" => array(
                     "name_1", "1",
                     "name_3", "3",
               ),
    "cat_2" => array(
                     "name_2", "2",
                      some rows ....
               ),
    ...
    "cat_k" => array(
                     some rows....
               ),
)

如果有什么办法,请给我一些关键字,而不是整个解决方案。

最佳答案

您实际上无法在单个查询中完成此操作,因为单独的 mysql 无法生成多维数组,但使用 PHP 几乎可以轻松完成此操作。基本上这就是你要做的:

$cats = array();
while ($row = $result->fetch()) {
    if (!isset($cats[$row->category])) {
        $cats[$row->category] = array();
    }
    $cats[$row->category][] = $row->name;
}

关于php - 按字段对行进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16554096/

相关文章:

php - 在 SQL 查询中做简单的数学运算

php - yii renderPartial 和 inlclude css with <link> 有延迟

java - executeUpdate 在大表上返回负值

sql - 使用 DATEDIFF() 的计算列

sql - select now() from table,为什么要指定一个表呢?

php - laravel 中的分页

php - codeigniter db->delete() 总是返回 true 吗?

java - Hibernate 将 NULL 插入原始类型字段

c# - 点 (.) 作为 © 从 MySQL 数据库中检索

MySQL - 使用子查询求平均值