【问题标题】:Grails GORM to return random rows from table?Grails GORM从表中返回随机行?
【发布时间】:2010-12-07 08:24:37
【问题描述】:

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

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

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

【问题讨论】:

  • 您能否在 Datasource.groovy 中打开 SQL 日志记录并查看正在生成的查询是什么?我对 MySQL 使用了类似的查询,它似乎按预期工作。
  • 实际上,我们使用的是执行查询。看我的回答...

标签: grails grails-orm


【解决方案1】:

我使用以下样式:

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

它从整个表中返回随机行(我们使用的是 MySQL)。

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

【讨论】:

    【解决方案2】:

    如果你想使用.withCriteria,你可以这样做:

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

    重要的是,有时(取决于创建的 Criteria 查询)有必要在 sqlRestriction 中添加 1=1,因为它会在生成的查询中添加“and”条件。

    所以如果你有一个 sql 异常使用:

    sqlRestriction " 1=1 order by rand()"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-14
      • 2017-09-07
      • 1970-01-01
      • 2017-10-28
      • 2014-09-11
      • 2015-02-13
      • 1970-01-01
      • 2014-03-13
      相关资源
      最近更新 更多