mysql按键分组返回结果
我有一张排行榜:mysql按键分组返回结果,mysql,sql,pdo,Mysql,Sql,Pdo,我有一张排行榜: +--------+----------+-------------+ | id | star | section | +--------+----------+-------------+ | 1 | 1 | A | | 2 | 0 | A | | 3 | 1 | B | | 4 | 1 |
+--------+----------+-------------+
| id | star | section |
+--------+----------+-------------+
| 1 | 1 | A |
| 2 | 0 | A |
| 3 | 1 | B |
| 4 | 1 | B |
| 5 | 0 | C |
| 6 | 1 | C |
| 7 | 0 | D |
| 8 | 1 | D |
+--------+----------+-------------+
我想知道这是否可能,我可以有一个回报,其中他们是返回小组
假设我做这个简单的查询从联盟表中选择id,star,其中star=1“
,然后使用PDO获取所有
我可以得到以下输出:
Array
(
[0] => Array
(
[id] => 1
[star] => 1
)
[1] => Array
(
[id] => 3
[star] => 1
)
[2] => Array
(
[id] => 4
[star] => 1
)
[3] => Array
(
[id] => 6
[star] => 1
)
[4] => Array
(
[id] => 8
[star] => 1
)
)
但是,我可以有这个输出,使它更有条理吗
Array
(
[A] => Array
(
[0] => Array
(
[id] => 1
[star] => 1
)
)
[B] => Array
(
[0] => Array
(
[id] => 3
[star] => 1
)
[1] => Array
(
[id] => 4
[star] => 1
)
[C] => Array
(
[0] => Array
(
[id] => 6
[star] => 1
)
)
[D] => Array
(
[0] => Array
(
[id] => 8
[star] => 1
)
)
)
您必须在代码中这样组织它。
从league_表中选择id、star、section,其中star=1,按section asc排序
将使您的操作更加简单
如果您使用的是php,它可能看起来像这样
foreach ($result as $key=>$row){
$output[$row['section']][]=$row;
}
这里有一个简单的解决方案,但不是你需要的
SELECT
group_concat(id) as IDs,
star,
group_concat(section) as Sections
FROM
league_table
WHERE star = 1
这将为您提供以下输出
IDs star Sections
1,3,4,6,8 1 A,B,B,C,D
如您所见,ID和节的编号相同,因此,如果将逗号分隔的字段(ID、节)转换为数组,则可以使用for循环并访问这两个字段。use可以使用以下SQL
select group_concat(id), star, section from league_table where star = 1' group by section
//you will get the following result
+--------+----------+-------------+
| id | star | section |
+--------+----------+-------------+
| 1 | 1 | A |
| 3,4 | 1 | B |
| 6 | 1 | C |
| 8 | 1 | D |
+--------+----------+-------------+
现在,只要遍历每一行,就可以分解(“,”,id)。星形并不重要,因为所有等于1的值都将被排序,它不会将每个id与其部分分开:(正确,您必须在代码中执行此操作。我在其中的phpGreat point中添加了一个示例。是否可以在
组中添加SELECT
?