0

我有以下表结构:

+------------------------+
| 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....
               ),
)

如果有任何方法,请给我一些关键字,而不是完整的解决方案。

4

2 回答 2

1

您不能在单个查询中真正做到这一点,因为单独的 mysql 无法产生多维数组,但使用 PHP 几乎是微不足道的。基本上这是你会做的:

$cats = array();
while ($row = $result->fetch()) {
    if (!isset($cats[$row->category])) {
        $cats[$row->category] = array();
    }
    $cats[$row->category][] = $row->name;
}
于 2013-05-14T22:51:57.010 回答
1

查询本身不会为您提供那种结构,但很容易将结果集读入那种二维数组:

$query = "SELECT category, id, name FROM table ORDER BY category ASC, id ASC";


$result = /* use you DB query mechanism of choice here */;

$array = array();

while($row = /* use your DB row fetch mechanism of choice here */) {
    $array[$row['category']][] = array($row['id'] => $row['name']);
}
于 2013-05-14T22:55:41.327 回答