2016-06-13 4 views
0

私はアンケートの回答を見つけようとしています。回答の数をユーザの計画に指定された制限に制限し、各選択肢ごとにいくつの回答があるか調べたいと思います。私の現在のクエリは次のようになります。どのようにしてActiveRecordクエリを制限し、 "where"句を実行しますか?

Response.joins(choice: { question: :survey }) 
    .where(surveys: { id:survey.id }) 
    .limit(plan.response_limit) 
    .where(choice: object) 

しかし、このクエリは「どこ」の句、を実行し、その後は、クエリを制限します。誰かが私にしたいことをするクエリを書く方法を教えてもらえますか?

編集:

SELECT "responses".* FROM "responses" 
INNER JOIN "choices" ON "choices"."id" = "responses"."choice_id" 
INNER JOIN "questions" ON "questions"."id" = "choices"."question_id" 
INNER JOIN "surveys" ON "surveys"."id" = "questions"."survey_id" 
WHERE "surveys"."id" = 1 AND "responses"."choice_id" = 1 
LIMIT 5000 

編集2:SQLは、あなたがサブクエリの中から選択するfromメソッドを使用することができます

+0

これは何のSQLを生成しますか? – Anthony

+0

編集:SQLを投稿自体に追加しました。 私はSQLクエリがどのように表示されるべきか分かりませんが、私がしたいことを知っています:特定のアンケートの回答を見つけ、結果を例えば5000に制限し、回答の数を探したいそれらの制限された結果内の与えられた選択IDに対して。 –

+0

これは、通常、SQL照会のようなものです。 LIMIT句は常にクエリの最後に表示されます。それは、それがすべてのものを取り出して制限を実行することを意味するものではありません...それは、それが標準に従ってどのように書かれているかだけです。 –

答えて

0

をフォーマット:

私は投稿クエリは、次のSQLを生成

subquery = Response.joins(choice: { question: :survey }) 
    .where(surveys: { id:survey.id }) 
    .limit(plan.response_limit) 

responses = Response.from(subquery, :resp) 
    .where(choice: object) 

私は、Railsがサブクエリの背後にある方法あなたはこれを次のようなものに微調整しなければならないかもしれません:

responses = Response.from(subquery) 
    .where("resp.choice_id = ?", object) 
+0

両方のクエリを試してみましたが、両方とも同じエラーが返されます: 'PG :: UndefinedTable:ERROR:テーブル"応答 "のFROM-clauseエントリがありませんLINE 1:SELECT" respond "。* FROM(SELECT" * FROM "respo ..." 編集:エラーメッセージを削除しました –

+0

テーブルエイリアス( 'resp')を使用して私の答えを編集しましたが、これはエラーを修正するものです。 –

+0

テーブルエイリアスを使用しようとしましたが、同じエラーが発生しています。 "from"メソッドとサブクエリを読まなくてはなりません。これは未知の領域です。 –

関連する問題