【问题标题】:How do I select a random row from database in grails?如何从 grails 中的数据库中选择随机行?
【发布时间】:2016-05-11 22:36:13
【问题描述】:

我正在尝试在 Grails 中制作一个简单的测验应用程序。我有一个问题,我需要从问题表中选择一个随机行并显示,并且每次用户提交答案时,问题必须不同。 我是 grails 的新手...

我有一个名为 QuizController.groovy 的控制器类 在控制器中,我有 playQuiz() 应该会呈现一个名为 playQuiz.gsp 的 gsp 页面,每次只有一个问题。

我的问题域是具有以下问题的问题
内部编号 字符串问题 字符串答案1 字符串答案2 字符串答案3 字符串答案4 诠释正确答案

在数据库中可能有很多行填充了数据,我需要一次随机获取一个数据。

我需要帮助以随机顺序从数据库中获取数据。

提前致谢!

【问题讨论】:

标签: hibernate grails select random


【解决方案1】:

试试这个,用 Grails 2.5.3 测试过:

def randomQuestion = Question.find("from Question order by rand()")

【讨论】:

  • 您将在此处获得问题列表
  • 是的,它确实有效。但是作为列表元素,以这种方式显示[值]。
  • 代码被编辑,这应该返回一个域对象而不是列表
【解决方案2】:

这不是很困难。 Hibernate Criteria 具有指定第一个结果索引的方法:setFirstResult(int firstResult) 和最大行数:setMaxResults(int maxResults)

int rowsCount = getRowsCount();
int randomRowIndex = getRandomNumberLessThan(rowsCount);

criteria.setFirstResult(randomRowIndex);
criteria.setMaxResults(1);

你也可以使用HQL

Query query = session.createQuery("from Question");
query.setFirstResult(randomRowIndex);
query.setMaxResults(1);

而且你需要使用额外的限制来不问以前问过的问题。

【讨论】:

    猜你喜欢
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    相关资源
    最近更新 更多