SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 03.09.2010 21:11:55

DalayLama
Участник
Зарегистрирован: 03.09.2010
Сообщений: 2

Select и Random()

Добрый день.
Помогите пожалуйста новичку с формированием запроса.
Есть таблица, со следующими полями:
ID, ID_Par, TextQuestion

Демо данные:
ID     ID_Par  TextQuestions 
0001| 0001| Вопрос 1  |
0002| 0001| Вопрос 2  |
0003| 0001| Вопрос 3  |
0004| 0001| Вопрос 4  |
0005| 0002| Вопрос 5  |
0006| 0002| Вопрос 6  |
0007| 0002| Вопрос 7  |
0008| 0002| Вопрос 8  |
0009| 0003| Вопрос 9  |
0010| 0003| Вопрос 10 |
0011| 0003| Вопрос 11 |
0012| 0003| Вопрос 12 |

Необходимо выбрать рандомом по одной записи в разрезе ID_Parant.

т.е. на выходе, по приведенным данным, мы должны иметь три записи, скажем 0001, 0007 и 0011.

Неактивен

 

#2 03.09.2010 21:52:57

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Select и Random()

select * from tablename group by ID_Par;
smile
Стандартом SQL такие апросы запрещены. Сервер MySQL выдаст вам случайную строку. Хотя, конечно, "случайную" не означает тот рандом, который вы имели в виду.

См. FAQ #9

Неактивен

 

#3 04.09.2010 02:42:23

DalayLama
Участник
Зарегистрирован: 03.09.2010
Сообщений: 2

Re: Select и Random()

1. FAQ я читал. Там рассматривается другая ситуация, а именно выбор любых строк рандомом из всей таблицы.
2. В предложенном Вами варианте нет случайности. Результат всегда будет одинаков.
Если вдаваться в сущность задачи, то ID - уникальный идентификатор вопроса, ID_Par - идентификатор категории вопроса (группы вопросов), TextQuestions - собственно текст вопроса.
Задача состоит в том, чтобы пользователь получал что-то типа теста. Тест формируется по принципу - из каждой группы вопросов, выбирается один вопрос рандомом (один вопрос из первой группы, один вопрос из второй группы и т.д.)

Неужели нет нормального красивого решения этой задачи? Второй день бьюсь и пока не преуспел...

Неактивен

 

#4 04.09.2010 10:52:13

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Select и Random()

Есть хороший способ и плохой способ. Хороший способ — делать по одному
запросу на категорию с помощью FAQ. Плохой способ — использовать то, что
MySQL работает и не по стандарту (некое расширение того, что написал Вася):

select id, id_par from (select id, id_par from tablename order by rand()) z group by id_par;

Учтите, что второе решение может в любой момент перестать работать, т.к.
режим «человек не умеет писать SQL — но сделаем, что сможем» может в любой
момент отмениться: в конце концов никто в MySQL не обязан поддерживать
ошибочные запросы не выдавать на них синтаксическую ошибку.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson