让GORM从表中返回随机行吗?

问题描述 投票:7回答:2

在我的grails应用程序中,我有:

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

假定表中有成千上万行符合上述条件。但是,似乎从表返回的行不是随机的,而是按照将行存储在Db中的顺序进行的,尽管在返回的20行的上下文中它们是随机的。为了使我的应用程序正常工作,我希望该查询从表中返回完全随机的行,例如行ID 203,行ID 3789,行ID 9087,行ID 789,等等。那怎么可能?

grails gorm
2个回答
12
投票

我使用以下样式:

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

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

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


0
投票

如果要使用.withCriteria,则可以解决该问题:

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

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

sqlRestriction " 1=1 order by rand()"
© www.soinside.com 2019 - 2024. All rights reserved.