在我的grails申请中,我有:
keywords = Keyword
.findAll("from Keyword where locale = '$locale' order by rand() ", [max:20])
假设表中有数千行符合上述条件。但似乎从表返回的行不是随机的,但是按顺序将行存储在Db中,尽管在返回的20行的上下文中它们是随机的。为了我的应用程序工作,我希望此查询从表中返回完全随机的行,如行ID 203,行ID 3789,行ID 9087,行ID 789,依此类推。怎么可能?
答案 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()"