3

やりたいことを説明しましょうClicks。商品のすべてのクリックが保存されるテーブルがあります。そして、顧客が何かをクリックした回数のグラフを作成したいと思います。

このグラフには、日、月、年のビューが必要です。

グラフが機能するために必要なのは、ハッシュまたはオブジェクトです。

私の考えは、次のようなものを手に入れているということです。

data( 2012 => [ 01 => 100, 02 => 300, 03 => 50 etc.], 2011 => [ 01 => 100, 02 => 300, 03 => 50 etc.])

postgresqlデータベースからこのような順序ですべてのデータを取得するにはどうすればよいですか?created_atフィールドを取得して、そこから日付を抽出したいと思います。後のプロセスでは、特定の月のすべてのアイテムをカウントする必要があります。

私はこの問題にかなり苦労しています、誰かが私を正しい方向に押しやることができますか?

4

2 に答える 2

3

あなたが投稿したスニペットはMySQL用です-PostgreSQLでも同じことをします:

@clicks = Click.select("count(*) as c, date_part('year', created_at) as y, date_part('month', created_at) as m").
                group("y", "m").
                where({:user_id => current_user.id})

これにより、の形式のハッシュが得られます[year, month] => count。希望の形式で取得するには、結果を少し調整する必要があります。

results = @clicks.inject({}) do |m, kv|
  year, month = kv.first
  clicks = kv.last
  m[year] ||= {}
  m[year][month] = clicks
  m
end

またはもう少し簡潔に:

results = @clicks.each_with_object({}) do |((year, month), clicks), m|
  (m[year] ||= {})[month] = clicks
end
于 2012-12-17T18:54:33.507 に答える
3

Postgree(またはHeroku whit PG)を使用している場合は、次のようにすることができます。

月ごと:

Consumer.all.order("extract(month from created_at) DESC")

日ごとに

Consumer.all.order("extract(day from created_at) DESC")

年ごと

Consumer.all.order("extract(year from created_at) DESC")
于 2014-07-04T17:10:59.797 に答える