0

我有这个语句来从数据库中选择与特定标签集匹配的给定数量的随机记录。我正在使用act-as-taggable-ongem 进行标记。

 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

我不确定该怎么做,因为我认为 Distinct 部分是由标记 gem 插入的。

提前致谢!

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 放在单独的查询级别中。

显然,上述查询可以与其他数据库一起使用,但不能与 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 语句中就没有包含两次。

于 2012-12-27T10:25:21.303 回答