2016-03-25 3 views
0

У меня есть 3 типа вопросов; true или false ToF, multi-choice MC и полный.динамические случайные строки из базы данных базы данных

Теперь я хочу случайным образом получить 10 вопросов правдивыми или ложными, 5 вопросов с множественным выбором и 2 вопроса (эти числа не являются статическими и будут переменными функции execute).

Мой стол что-то вроде этого:

+-----+----------------------------------------------------+----------+--------+ 
| id | question           | type  | examId | 
+-----+----------------------------------------------------+----------+--------+ 
| 1 | true or false question 1       | ToF  |  1 | 
| 2 | true or false question 2       | ToF  |  1 | 
| 3 | true or false question 3       | ToF  |  1 | 
| 4 | true or false question 4       | ToF  |  1 | 
| 5 | true or false question 5       | ToF  |  1 | 
| 6 | true or false question 6       | ToF  |  1 | 
| 7 | true or false question 7       | ToF  |  1 | 
| 8 | true or false question 8       | ToF  |  1 | 
| 9 | true or false question 9       | ToF  |  1 | 
| 10 | true or false question 10       | ToF  |  1 | 
| 11 | true or false question 11       | ToF  |  1 | 
| 12 | true or false question 12       | ToF  |  1 | 
| 13 | multi choice question 1       | MC  |  1 | 
| 14 | multi choice question 2       | MC  |  1 | 
| 15 | multi choice question 3       | MC  |  1 | 
| 16 | multi choice question 4       | MC  |  1 | 
| 17 | multi choice question 5       | MC  |  1 | 
| 18 | multi choice question 6       | MC  |  1 | 
| 19 | multi choice question 7       | MC  |  1 | 
| 20 | multi choice question 8       | MC  |  1 | 
| 21 | complete question 1        | complete |  1 | 
| 22 | complete question 2        | complete |  1 | 
| 23 | complete question 3        | complete |  1 | 
| 24 | complete question 4        | complete |  1 | 
| 25 | complete question 5        | complete |  1 | 
| 26 | complete question 6        | complete |  1 | 
| 27 | complete question 7        | complete |  1 | 
+-----+----------------------------------------------------+----------+--------+ 

То, что я пытался до сих пор, чтобы написать запрос для каждого типа, как тот

SELECT * FROM question WHERE type = 'ToF' ORDER BY rand() LIMIT 10 
SELECT * FROM question WHERE type = 'MC' ORDER BY rand() LIMIT 5 
SELECT * FROM question WHERE type = 'complete' ORDER BY rand() LIMIT 2 

Могу ли я сделать это только с одним запросом?

Хорошо ли получить результат, отсортированный по типу, а затем PHP получить случайный результат, который я хочу?

ответ

2

Вы можете сделать это все в одном запросе. , , даже окончательная рандомизация:

(SELECT * FROM question WHERE type = 'ToF' ORDER BY rand() LIMIT 10 
) UNION ALL 
(SELECT * FROM question WHERE type = 'MC' ORDER BY rand() LIMIT 5 
) UNION ALL 
(SELECT * FROM question WHERE type = 'complete' ORDER BY rand() LIMIT 2 
) 
ORDER BY rand(); 

Это разумный подход - если у вас есть только несколько известных типов.

+0

типы статические, так что это ответ, который я хочу, спасибо :) – robert

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