Выбор нескольких наборов строк с помощью одного SQL-запроса - PullRequest
4 голосов
/ 24 октября 2011

У меня есть таблица вопросов, изложенная так ..

id |вопрос |ответ |учебная программа |сложность

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

Так что, если есть 4 программы, у меня будет 20 вопросов.

Я думал что-то вроде этого ...

   SELECT 
    * 
FROM 
    questions 
WHERE 
    difficulty='easy' 
AND 
    syllabus 
IN 
(
    SELECT DISTINCT 
        syllabus 
    FROM 
        questions 
    WHERE 
        difficulty='easy'
) 
LIMIT 
(5*
    (
    SELECT 
        COUNT(DISTINCT syllabus) 
    FROM 
        questions 
    WHERE 
        difficulty='easy'
    )

Но это не возвращает 5 изкаждый из отдельных учебных планов содержит только правильное количество вопросов из любого учебного плана.

1 Ответ

1 голос
/ 24 октября 2011

Это будет работать, но будет очень медленно:

SELECT * FROM questions WHERE difficulty='easy' ORDER BY RAND() LIMIT 5;

Лучший способ - сначала выбрать 5 идентификаторов, а затем извлечь строки, соответствующие этим идентификаторам. Выбор самих идентификаторов можно выполнить с помощью WHERE ID> RAND (0, MAX (ID)), но при наличии пропусков ваши данные будут искажены.

Здесь обсуждается лучшая альтернатива, но она требует больше усилий: Простые случайные выборки из базы данных Sql

...