0

我有一个数据库项目结构,例如(ID、projectName、projectDate(MySQL DATE)等)。当我做 SQL 查询时:

SELECT * FROM projects ORDER BY year(projectDate) DESC

结果是:

2012 Project 1
2012 Project 2
2011 Project 3 

我需要按年分组项目,例如:

2012:
Project 1
Project 2
2011:
Project 3

如果没有任何一年的 SQL 查询,我怎么能做到这一点?我使用 Smarty 进行模板输出。

4

3 回答 3

0

我不认为你可以做你想做的事。您的示例输出中似乎需要五行,两行包含“年份”值,三行包含“项目”值。

它们具有不同数量和类型的列。

SQL 查询的输出由一个集合组成,其中所有行都具有相同的列。尽管您可以想象将所有值连接到一个列中,但最好在应用程序中完成。

如果您只是想要这种格式的项目名称,您可以通过以下方式获得它:

select ProjectName
from (SELECT ProjectName, year(projectDate) as y, 1 as ordering
      FROM projects 
      union all
      SELECT distinct year(projectDate), year(projectDate), 0
      FROM projects
     ) p
order by y, ordering;
于 2013-08-31T19:17:57.673 回答
0

这应该是最好的方法

select 
  year(projectDate) year
 , GROUP_CONCAT(projectName)
from 
 projects
group by 
 year(projectDate) desc

请参阅http://sqlfiddle.com/#!2/d11df/3 并在 php 中爆炸并将您的数据传递给 smarty

select 
  year(projectDate) year
 , GROUP_CONCAT(projectName SEPARATOR '<br />') as projectName_string
from 
 projects
group by 
 year(projectDate) desc

也许这也可以工作http://sqlfiddle.com/#!2/d11df/5

于 2013-08-31T19:24:36.047 回答
0
SELECT * FROM projects GROUP BY year(projectDate) ORDER BY year(projectDate) DESC 

ORDER BY 更改返回项目的顺序。

GROUP BY 将按指定列聚合记录,允许您对非分组列(如 SUM、COUNT、AVG 等)执行聚合函数。

于 2013-08-31T18:43:04.387 回答