按年分组我的输出

时间:2013-08-31 18:38:16

标签: php mysql smarty

我有一个DB Projects结构,如(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作为模板输出。

3 个答案:

答案 0 :(得分:0)

SELECT * FROM projects GROUP BY year(projectDate) ORDER BY year(projectDate) DESC 

ORDER BY改变了返回项目的顺序。

GROUP BY将按指定列聚合记录,这些列允许您对非分组列(例如SUM,COUNT,AVG等)执行聚合功能。

答案 1 :(得分: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;

答案 2 :(得分: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