Pessoal, preciso melhorar um select que faz o seguinte:
Ele mostra a quantidade de questões cadastradas no site da seguinte forma:
Atualização de Questões:
03/12 - Noções de Infor... (23 questões)
19/10 - Administração G... (5 questões)
12/07 - Redes de Comput... (16 questões)
12/07 - Direito Previde... (7 questões)
12/07 - Administração F... (4 questões)
12/07 - Segurança da In... (11 questões)
12/07 - Direito Interna... (7 questões)
12/07 - Administração G... (2 questões)
12/07 - Arquitetura de ... (70 questões)
12/07 - Direito Interna... (39 questões)
12/07 - Sistemas Operac... (22 questões)
12/07 - Direitos Humano... (99 questões)
12/07 - Administração P... (3 questões)
pegar a última questão e verificar a disciplina dela...
pegar a próxima questão e verificar a disciplina dela... se for igual junta(soma/conta) com a primeira...
e vai indo até dar 13 disciplinas.
O que ocorre é que esta verificando todas as questões.(nesse primeiro select abaixo)
Na hora que der 13 disciplinas diferentes tem que parar.
Resumindo: tenho que pegar as últimas questões incluidas para 13 disciplinas.
Como estava inicialmente:
SELECT count(questoes.id_questao) as totalQuestao, disciplinas.nome as nomeDisciplina, disciplinas.id_disciplina as idDisciplina, questoes.data_cadastro as dataCadastroQuestao
FROM disciplinas
INNER JOIN questoes_disciplina questoes_disciplina ON questoes_disciplina.id_disciplina = disciplinas.id_disciplina
INNER JOIN questoes ON questoes.id_questao = questoes_disciplina.id_questao
GROUP BY disciplinas.id_disciplina, DATE(questoes.data_cadastro)
ORDER BY DATE(questoes.data_cadastro) desc
LIMIT 13;
tempo: 1,67 segundos
Como ficou a melhoria(gambiarra):
SELECT count(questoes.id_questao) as totalQuestao,
disciplinas.nome as nomeDisciplina,
disciplinas.id_disciplina as idDisciplina,
questoes.data_cadastro as dataCadastroQuestao,
questoes_disciplina.id_questao as asd
FROM disciplinas
INNER JOIN questoes_disciplina questoes_disciplina ON questoes_disciplina.id_disciplina = disciplinas.id_disciplina
INNER JOIN questoes ON questoes.id_questao = questoes_disciplina.id_questao
WHERE questoes_disciplina.id_questao <= (SELECT MAX(questoes_disciplina.id_questao) FROM questoes_disciplina) and
questoes_disciplina.id_questao >= ((SELECT MAX(questoes_disciplina.id_questao) FROM questoes_disciplina) - 5000)
GROUP BY disciplinas.id_disciplina, DATE(questoes.data_cadastro)
ORDER BY DATE(questoes.data_cadastro) DESC
LIMIT 13;
tempo: 0,047 segundos
Preciso melhorar definitivamente esse select, fazer um indice ou sei la oque. alguém poderia me ajudar?
Pergunta
Rodrigo Bizz
Pessoal, preciso melhorar um select que faz o seguinte:
Ele mostra a quantidade de questões cadastradas no site da seguinte forma:
Atualização de Questões:
03/12 - Noções de Infor... (23 questões)
19/10 - Administração G... (5 questões)
12/07 - Redes de Comput... (16 questões)
12/07 - Direito Previde... (7 questões)
12/07 - Administração F... (4 questões)
12/07 - Segurança da In... (11 questões)
12/07 - Direito Interna... (7 questões)
12/07 - Administração G... (2 questões)
12/07 - Arquitetura de ... (70 questões)
12/07 - Direito Interna... (39 questões)
12/07 - Sistemas Operac... (22 questões)
12/07 - Direitos Humano... (99 questões)
12/07 - Administração P... (3 questões)
pegar a última questão e verificar a disciplina dela...
pegar a próxima questão e verificar a disciplina dela... se for igual junta(soma/conta) com a primeira...
e vai indo até dar 13 disciplinas.
O que ocorre é que esta verificando todas as questões.(nesse primeiro select abaixo)
Na hora que der 13 disciplinas diferentes tem que parar.
Resumindo: tenho que pegar as últimas questões incluidas para 13 disciplinas.
Como estava inicialmente:
SELECT count(questoes.id_questao) as totalQuestao, disciplinas.nome as nomeDisciplina, disciplinas.id_disciplina as idDisciplina, questoes.data_cadastro as dataCadastroQuestao
FROM disciplinas
INNER JOIN questoes_disciplina questoes_disciplina ON questoes_disciplina.id_disciplina = disciplinas.id_disciplina
INNER JOIN questoes ON questoes.id_questao = questoes_disciplina.id_questao
GROUP BY disciplinas.id_disciplina, DATE(questoes.data_cadastro)
ORDER BY DATE(questoes.data_cadastro) desc
LIMIT 13;
tempo: 1,67 segundos
Como ficou a melhoria(gambiarra):
SELECT count(questoes.id_questao) as totalQuestao,
disciplinas.nome as nomeDisciplina,
disciplinas.id_disciplina as idDisciplina,
questoes.data_cadastro as dataCadastroQuestao,
questoes_disciplina.id_questao as asd
FROM disciplinas
INNER JOIN questoes_disciplina questoes_disciplina ON questoes_disciplina.id_disciplina = disciplinas.id_disciplina
INNER JOIN questoes ON questoes.id_questao = questoes_disciplina.id_questao
WHERE questoes_disciplina.id_questao <= (SELECT MAX(questoes_disciplina.id_questao) FROM questoes_disciplina) and
questoes_disciplina.id_questao >= ((SELECT MAX(questoes_disciplina.id_questao) FROM questoes_disciplina) - 5000)
GROUP BY disciplinas.id_disciplina, DATE(questoes.data_cadastro)
ORDER BY DATE(questoes.data_cadastro) DESC
LIMIT 13;
tempo: 0,047 segundos
Preciso melhorar definitivamente esse select, fazer um indice ou sei la oque. alguém poderia me ajudar?
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.