我有一个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作为模板输出。
答案 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