Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ferruge

[Resolvido] SQL lenta

Recommended Posts

Bom dia, Pessoal

 

Estou tendo dificuldades com a seguinte query:

 

SELECT DISTINCT u.nome, 
(SELECT COUNT(id_solicitacao) FROM solicitacoes WHERE id_usuario = u.id AND status = '1') as qtde,
(SELECT MAX(DATE(data)) FROM solicitacoes WHERE id_usuario = u.id AND status = '1') AS ultimo
FROM usuarios u
WHERE  EXISTS (SELECT id_solicitacao FROM solicitacoes WHERE id_usuario = u.id AND status = '1')
ORDER BY ultimo ASC

 

Está demorando muito pra executar. Acredito que haja alguma forma mais rápida de executar essa consulta..

Alguém pode me ajudar?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O inner join não ajudaria não?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O inner join não ajudaria não?

 

Até ajudaria, acho, mas não consegui usar direito, pq depende dos campos qtde e ultimo pra fazer ordenação..

Não consegui retornar os dados corretamente com o JOIN, a consulta retornou uma linha só, contando todas as solicitações no campo qtde, ao invés de retornar todos os usuários com a qtde de suas solicitações...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não seria isto ?

 

select u.nome,count(s.id_solicitacao),max(s.date(data)) 
from solicitacoes s,usuarios u
where s.id_usuario = u.id 
and status = '1'
group by u.nome
order by 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se esta query ajuda:

SELECT 
DISTINCT u.nome,  
COUNT(solicitacoes.id_solicitacao)  AS qtde, 
MAX(DATE(DATA) AS ultimo 
FROM usuarios INNER JOIN solicitacoes
ON usuarios.id =  solicitacoes.id_solicitacao
AND solicitacoes.status = '1'

WHERE  EXISTS (SELECT id_solicitacao FROM solicitacoes WHERE id_usuario = u.id AND status = '1') 
ORDER BY ultimo ASC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não seria isto ?

 

select u.nome,count(s.id_solicitacao),max(s.date(data)) 
from solicitacoes s,usuarios u
where s.id_usuario = u.id 
and status = '1'
group by u.nome
order by 1

 

Cara, reduziu em mais de 90% o tempo de execução...

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.