2016-05-11 2 views
0

Я пытаюсь сделать простую викторину в Grails. У меня возникла проблема в том, что мне нужно выбрать случайную строку из таблицы вопросов и отобразить ее, и каждый раз, когда пользователь отправляет ответ, вопрос должен быть другим. Я новичок в Граалей ...Как выбрать случайную строку из базы данных в grails?

У меня есть класс контроллера с именем QuizController.groovy и в контроллере, у меня есть playQuiz(), который должен оказывать на GSP страницу с именем playQuiz.gsp с одним вопросом на время.

Мой домен для вопроса Вопрос, который имеет следующие
Int ID Струнных вопрос Строки answer1 Строка ANSWER2 Строка Ответ3 Строки ANSWER4 Int CorrectAnswer

В базе данных может быть число строк заселенного данных, и мне нужно брать по одной информации за раз в случайном порядке.

Мне нужна помощь по извлечению данных из базы данных в случайном порядке.

Заранее благодарен!

+2

[? Что вы пробовали до сих пор] (http://whathaveyoutried.com) Пожалуйста [править] Ваш вопрос, чтобы показать [ mcve] кода , с которым у вас возникли проблемы, мы можем попытаться помочь с конкретной проблемой. Вы также должны прочитать [ask]. –

+0

Извините за непонятный вопрос, я только что редактировал вопрос. Надеюсь, теперь будет ясно. –

ответ

2

Попробуйте это был протестирован с Grails 2.5.3:

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

вы получите список вопросов здесь – injecteer

+0

Да, он фактически сработал. Но получил как элемент списка, отображаемый таким образом [значение]. –

+0

Код был отредактирован, это должно вернуть объект домена вместо списка –

0

Это не очень сложно. 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); 

И вам нужно использовать дополнительные ограничения не задать вопрос, который был задан ранее.

Смежные вопросы