Grails GORM从表中返回随机行?

时间:2010-12-07 08:24:37

标签: grails gorm

在我的grails申请中,我有:

keywords = Keyword
    .findAll("from Keyword where locale = '$locale' order by rand() ", [max:20])

假设表中有数千行符合上述条件。但似乎从表返回的行不是随机的,但是按顺序将行存储在Db中,尽管在返回的20行的上下文中它们是随机的。为了我的应用程序工作,我希望此查询从表中返回完全随机的行,如行ID 203,行ID 3789,行ID 9087,行ID 789,依此类推。怎么可能?

2 个答案:

答案 0 :(得分:12)

我使用以下样式:

Keyword.executeQuery('from Keyword order by rand()', [max: 9])

并从整个表中返回随机行(我们正在使用MySQL)。

我不确定为什么执行查询的行为与findAll不同。

答案 1 :(得分:0)

如果你想使用.withCriteria,你可以做那个工作:

User.withCriteria{
eq 'name', 'joseph'
sqlRestriction " order by rand()"
}

重要的是,有时候(取决于创建的Criteria查询),必须在sqlRestriction中添加“1 = 1”,因为它会在生成的查询中添加“和”条件。 因此,如果您使用sqle例外:

sqlRestriction " 1=1 order by rand()"