Php 按年份分组SQL查询结果
我是SQL新手,需要按年份对查询结果进行分组 换句话说,我有这个表结构:Php 按年份分组SQL查询结果,php,sql,mysqli,Php,Sql,Mysqli,我是SQL新手,需要按年份对查询结果进行分组 换句话说,我有这个表结构: id | title | date 我的当前查询SELECT*FROM table 我目前的结果是: array => 0 => array => ... 'date' => string '2018-03-09' 1 => array => ... 'date' => string '2018-03-15'
id | title | date
我的当前查询SELECT*FROM table
我目前的结果是:
array =>
0 =>
array =>
...
'date' => string '2018-03-09'
1 =>
array =>
...
'date' => string '2018-03-15'
2 =>
array =>
...
'date' => string '2017-03-15'
我需要这样的东西:
array =>
0 =>
array =>
...
'date' => string '2018-03-09'
array =>
...
'date' => string '2018-03-15'
1 =>
array =>
...
'date' => string '2017-03-15'
提前感谢您的帮助:)
[编辑]
我终于找到了做我想做的事情的方法:
$result = $sql->query("SELECT * FROM abstract ORDER BY date DESC");
$array = [];
forEach($result as $res) {
$year = strtok($res['date'], '-');
if (!isset($array[$year]))
$array[$year][0] = $res;
else
array_push($array[$year], $res);
}
return $array;
如果您希望按年份分组数据
Select id,title,date,DATE_FORMAT(date, '%Y') YEAR_GRP from table group by YEAR_GRP
这是您希望在查询中执行的操作,因为MySQL可以比PHP更有效地执行 方法是向查询中添加一个,它将根据分组值将结果集中的行批处理为一行,在您的情况下,分组值将是,因为您希望按每行日期中的年份组件对项目进行分组 因为您仍然希望返回所有结果,而只是按照每个不同的分组值进行分组,所以需要使用聚合函数将所有匹配行组合成一个值数组。幸运的是,MySQL有一个名为的函数,它完全满足您的需要 因此,您将得到一个类似以下内容的查询:
SELECT year(`date`) AS `year`, json_objectagg(id, `date`, title) AS `line`
FROM abstract
GROUP BY `year`
代替json\u objectagg
,备选方案包括
…或
…取决于您需要的输出类型。看起来更像是一个PHP问题—如何将数据放入数组中。
SELECT year(`date`) AS `year`, json_arrayagg(id, `date`, title) AS `line`
SELECT year(`date`) AS `year`, group_concat(id, `date`, title) AS `line`