Php 按年份分组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'

我是SQL新手,需要按年份对查询结果进行分组

换句话说,我有这个表结构:
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`