按字段分组

时间:2013-05-14 22:49:33

标签: 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....
               ),
)

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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']);
}