我有以下表结构:
+------------------------+
| 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....
),
)
如果有任何方法,请给我一些关键词,而不是整个解决方案。
答案 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']);
}