Ir para conteúdo

POWERED BY:

Arquivado

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

Eragon

SELECT simples e problemático

Recommended Posts

Boa tarde

 

esse select funciona perfeito

 

SELECT A.*, B.nome, B.email, B.fone, C.uf, C.cidade, D.loja FROM pedidos A

LEFT JOIN usuarios B ON A.id_usuario = B.id

LEFT JOIN enderecos C ON A.id_endereco = C.id

LEFT JOIN lojas D ON D.id = A.id_loja

WHERE A.data >= '2011-04-01' ORDER BY A.id DESC

 

agora quando adiciono a tabela pagamentos E, vem o problema

ou posso ter mais de um pagamento por pedido, só quero o último

 

SELECT A.*, B.nome, B.email, B.fone, C.uf, C.cidade, D.loja, E.qtd_parcelas, E.id_tipo_pagamento FROM pedidos A

LEFT JOIN usuarios B ON A.id_usuario = B.id

LEFT JOIN enderecos C ON A.id_endereco = C.id

LEFT JOIN lojas D ON D.id = A.id_loja

LEFT JOIN pagamentos E ON E.id = (SELECT id FROM pagamentos WHERE id_pedido = A.id AND data >= '2011-04-01' ORDER BY id DESC LIMIT 1)

WHERE A.data >= '2011-04-01' ORDER BY A.id DESC

 

quando faço isso ele começa a listar mais trava, são muitos pagamentos para ele checar, oq eu recomendam? uma view com o ultimo pagamento?

será que não tem outra solução?

 

obrigado pela atenção de vcs

Compartilhar este post


Link para o post
Compartilhar em outros sites

O id_pedido esta com índice criado?

Posta um explain do select abaixo..

abraços

marco

 

Boa tarde

 

esse select funciona perfeito

 

SELECT A.*, B.nome, B.email, B.fone, C.uf, C.cidade, D.loja FROM pedidos A

LEFT JOIN usuarios B ON A.id_usuario = B.id

LEFT JOIN enderecos C ON A.id_endereco = C.id

LEFT JOIN lojas D ON D.id = A.id_loja

WHERE A.data >= '2011-04-01' ORDER BY A.id DESC

 

agora quando adiciono a tabela pagamentos E, vem o problema

ou posso ter mais de um pagamento por pedido, só quero o último

 

SELECT A.*, B.nome, B.email, B.fone, C.uf, C.cidade, D.loja, E.qtd_parcelas, E.id_tipo_pagamento FROM pedidos A

LEFT JOIN usuarios B ON A.id_usuario = B.id

LEFT JOIN enderecos C ON A.id_endereco = C.id

LEFT JOIN lojas D ON D.id = A.id_loja

LEFT JOIN pagamentos E ON E.id = (SELECT id FROM pagamentos WHERE id_pedido = A.id AND data >= '2011-04-01' ORDER BY id DESC LIMIT 1)

WHERE A.data >= '2011-04-01' ORDER BY A.id DESC

 

quando faço isso ele começa a listar mais trava, são muitos pagamentos para ele checar, oq eu recomendam? uma view com o ultimo pagamento?

será que não tem outra solução?

 

obrigado pela atenção de vcs

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.