我正在做一个小问答游戏,我想随机选择分为4个不同主题的10个问题,每个问题分为理论和实践问题
1)是否有任何不同的方式来选择随机而不是ORDER BY RAND( )
- 这种方式非常慢
2)如何更改减少查询只使用一个select
?
这就是我想要选择的内容
这是我现在的查询,它运作良好:
(
SELECT questao_id, titulo_pergunta, abordagem, opcao1, opcao2, opcao3, opcao4, nome_tema, nome_assunto FROM quizz
INNER JOIN tema ON tema_id = id_tema
INNER JOIN assunto_quizz ON assunto_id = id_assunto
WHERE nome_tema = 'IAS 2 Inventários'
AND nome_assunto = 'Conceito de inventário'
AND abordagem = 'T'
ORDER BY RAND( ) LIMIT 1
)
UNION
(
SELECT questao_id, titulo_pergunta, abordagem, opcao1, opcao2, opcao3, opcao4, nome_tema, nome_assunto FROM quizz
INNER JOIN tema ON tema_id = id_tema
INNER JOIN assunto_quizz ON assunto_id = id_assunto
WHERE nome_tema = 'IAS 2 Inventários'
AND nome_assunto = 'Conceito de inventário'
AND abordagem = 'P'
ORDER BY RAND( ) LIMIT 1
)
UNION
(
SELECT questao_id, titulo_pergunta, abordagem, opcao1, opcao2, opcao3, opcao4, nome_tema, nome_assunto FROM quizz
INNER JOIN tema ON tema_id = id_tema
INNER JOIN assunto_quizz ON assunto_id = id_assunto
WHERE nome_tema = 'IAS 2 Inventários'
AND nome_assunto = 'Mensuração de inventários no reconhecimento'
AND abordagem = 'T'
ORDER BY RAND( ) LIMIT 1
)
UNION
(
SELECT questao_id, titulo_pergunta, abordagem, opcao1, opcao2, opcao3, opcao4, nome_tema, nome_assunto FROM quizz
INNER JOIN tema ON tema_id = id_tema
INNER JOIN assunto_quizz ON assunto_id = id_assunto
WHERE nome_tema = 'IAS 2 Inventários'
AND nome_assunto = 'Mensuração de inventários no reconhecimento'
AND abordagem = 'P'
ORDER BY RAND( ) LIMIT 2
)
UNION
(
SELECT questao_id, titulo_pergunta, abordagem, opcao1, opcao2, opcao3, opcao4, nome_tema, nome_assunto FROM quizz
INNER JOIN tema ON tema_id = id_tema
INNER JOIN assunto_quizz ON assunto_id = id_assunto
WHERE nome_tema = 'IAS 2 Inventários'
AND nome_assunto = 'Mensuração de inventários após o reconhecimento'
AND abordagem = 'T'
ORDER BY RAND( ) LIMIT 1
)
UNION
(
SELECT questao_id, titulo_pergunta, abordagem, opcao1, opcao2, opcao3, opcao4, nome_tema, nome_assunto FROM quizz
INNER JOIN tema ON tema_id = id_tema
INNER JOIN assunto_quizz ON assunto_id = id_assunto
WHERE nome_tema = 'IAS 2 Inventários'
AND nome_assunto = 'Mensuração de inventários após o reconhecimento'
AND abordagem = 'P'
ORDER BY RAND( ) LIMIT 2
)
UNION
(
SELECT questao_id, titulo_pergunta, abordagem, opcao1, opcao2, opcao3, opcao4, nome_tema, nome_assunto FROM quizz
INNER JOIN tema ON tema_id = id_tema
INNER JOIN assunto_quizz ON assunto_id = id_assunto
WHERE nome_tema = 'IAS 2 Inventários'
AND nome_assunto = 'Desreconhecimento de inventários' OR nome_assunto = 'Divulgações sobre inventários'
AND abordagem = 'T'
ORDER BY RAND( ) LIMIT 2
)