0

特定のタグのセットに一致するデータベースから特定の数のランダムなレコードを選択するこのステートメントがあります。act-as-taggable-onタグ付けにはgemを使用しています。

 questions=Question.select('questions.*,RANDOM()').tagged_with(tags,:any=>true).order("RANDOM()").limit(test.no_of_questions)

postgresql を使用していますが、次のエラーが発生します。

PG::Error: ERROR:  syntax error at or near "DISTINCT"
LINE 1: SELECT  questions.*,RANDOM(), DISTINCT questions.* FROM "que...
                                      ^
: SELECT  questions.*,RANDOM(), DISTINCT questions.* FROM "questions" JOIN taggings quest_taggings_14e6dd0  ON quest_taggings_14e6dd0.taggable_id = "questions".id AND quest_taggings_14e6dd0.taggable_type = 'Question' WHERE (quest_taggings_14e6dd0.tag_id = 1) ORDER BY RANDOM() LIMIT 3

タグ付けgemでDistinct部分が挿入されていると思うのでどうしようか迷っています。

前もって感謝します!

4

2 に答える 2

1

あなたはこれらの線に沿ってそれを行うことができます

Question.tagged_with(tags,:any=>"true").order("RANDOM()").limit(limit_number)

アップデート

ここに示すようにhttp://archives.postgresql.org/pgsql-sql/2010-10/msg00004.php

DISTINCT と ORDER BY を別々のクエリ レベルに配置する必要があります。

どうやら、上記のクエリは他のDBでは機能しますが、Postgresqlでは機能しません

于 2012-12-27T07:34:53.740 に答える
0

気にしないで解決策を見つけました。

これは私がしました:

questions=Question.tagged_with(tags,:any=>true)
  questions=questions.select('questions.*,RANDOM()').order("RANDOM()").limit(test.no_of_questions)

この方法questions.*では、select ステートメントに 2 回含まれませんでした。

于 2012-12-27T10:25:21.303 に答える