Grails从Mysql选择随机记录解决过程
想要做一个考试系统,随机抽取试卷题目,原来的代码是:java 代码[*]def artlist = Article.findAll("from Article order by rand()")
[*][ article:artlist ]
发现显示出来的每个题目都是带一个[],才知道原来选择出来的是一个List。
后来把代码修改为:
java 代码
[*]def artlist = Article.findAll("from Article order by rand()")
[*]def art = null
[*]if(artlist!=null){
[*] art = artlist.get(0)
[*]}
[*] [ article:artlist ]
本来想在by rand()后面加上limit 1,但是加上后出错,因为知道Grails使用的是Hibernate类似的,就去寻找Hiberanate的createQuery这样的方法,但是只有一个executeQuery,而且返回的也是List,没有maxResults,setFirstResult的方法,很麻烦。
后来查手册才发现,原来find方法是返回第一个记录,所以代码就改为:
java 代码
[*]def artlist = Article.find("from Article order by rand()")
[*] [ article:artlist ]
但是这样做感觉效率可能会比较低,而且如果要找随机的5条就比较麻烦,因为可能会有重复的,不知道有没有更好的解决方法。
页:
[1]