1

プレーン SQL からクエリを変更すると問題が発生します (注: AR は使用していませんが、続編です)。

したがって、これは機能します:

Post.fetch(
    "SELECT
      COUNT(*) as count, HOUR(created_at) as date, class_type
    FROM
      tours t
    WHERE
      t.created_at Between ? and ?
    GROUP BY hour(t.created_at), flavor", @range_begins, @range_ends
    ).all

そして、期待される配列を返します。しかし、これはしません:

Post.select("COUNT(*) as count, HOUR(created_at) as date, class_type")
    .where(created_at: @basic_range)
    .group_by("HOUR(created_at), flavor")
    .all

しかし、コンソール (最後に .all がない) では、そこから生成されたクエリは適切に見えます (読みやすいようにフォーマットされています)。

<Sequel::Mysql2::Dataset:
"SELECT
  'COUNT(*) as count, HOUR(created_at) as date, class_type'
FROM
  `posts`
WHERE
  ((`created_at` >= '2014-05-01 00:00:00') AND (`created_at` <= '2014-05-01 23:59:59')) 
GROUP BY
  'HOUR(created_at), flavor'">

最後に「.all」を追加すると、次のような配列が返されます。

[#<Tour @values={:"COUNT(*) as count, HOUR(created_at) as date, class_type"=>"COUNT(*) as count, HOUR(created_at) as date, class_type"}>]

私は何が欠けていますか?助けてくれてありがとう

4

1 に答える 1

4

関数を使用してクエリを作成する場合、最後whereに記述する必要はありません.all。デフォルトでは、クエリ パラメーターに一致するすべての結果が得られます。あなたはただする必要があります:

Post.select("COUNT(*) as count, HOUR(created_at) as date, class_type")
    .where(created_at: @basic_range)
    .group_by("HOUR(created_at), flavor")
于 2014-05-01T07:40:48.500 に答える