0 レビュー
3 回答
php-出力を年ごとにグループ化
(ID、projectName、projectDate(MySQL DATE)など)のようなDBプロジェクト構造があります。 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
レビュー
答え :
解決策: SELECT * FROM projects GROUP BY year(projectDate) ORDER BY year(projectDate) DESC
ORDER BYは、アイテムが返される順序を変更します。
GROUP BYは、指定された列ごとにレコードを集計します。これにより、グループ化されていない列(SUM、COUNT、AVGなど)で集計関数を実行できます。
SELECT * FROM projects GROUP BY year(projectDate) ORDER BY year(projectDate) DESC
ORDER BYは、アイテムが返される順序を変更します。
GROUP BYは、指定された列ごとにレコードを集計します。これにより、グループ化されていない列(SUM、COUNT、AVGなど)で集計関数を実行できます。
わからない
0
レビュー
答え :
解決策:
やりたいことができないと思います。サンプル出力に5つの行が必要なようです。2つには「年」の値が含まれ、3つには「プロジェクト」の値が含まれています。
これらの列の数と種類は異なります。
SQLクエリからの出力は、すべての行が同じ列を持つセットで構成されます。おそらく、すべての値を1つの列に連結することもできますが、それはアプリケーションで行う方が適切です。
この形式のプロジェクト名が必要な場合は、次のようにして取得できます。
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;
わからない
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
でも機能するでしょう
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。