AJUDA COM SELECT

FERDEAD 12/11/2013 11:10:51
#431020
Olá!

já tentei de várias formas e não consigo fazer o select que preciso...

tenho duas tabelas... PEDIDO e PEDIDOSTATUS
PEDIDO tem os campos e valores:
Codigo, Data, Valor, Vendedor
1, 12/11/2013, 100, Paulo


PEDIDOSTATUS tem os campos e valores:
Codigo, CodPedido, Descricao
1, 1, PREENCHENDO
2, 1, FINALIZADO
3, 1, PRODUÇÃO
4, 1, ENTREGUE

agora, eu gostaria de fazer um select com os dados da tabela PEDIDO, e o campo DESCRICAO. Lembrando que eu quero apenas o último status cadastrado, que no exemplo seria [Ô]ENTREGUE[Ô]. Portanto o retorno teria que ser:
Codigo, Data, Valor, Vendedor, Status
1, 12/11/2013, 100, Paulo, ENTREGUE

SELECT p.Codigo, p.Valor, p.data, p.Vendedor (select descricao from pedidostatus x where x.CodPedido = p.codigo order by codigo desc limit 1) as Status FROM Pedidos p 


esse select até consegui fazer, porém preciso ainda colocar filtro no status, no qual não consigo de maneira alguma! Por exemplo, eu quero visualizar apenas os pedidos que estão em PRODUÇÃO... como eu faço isso ?
MADMAX 12/11/2013 11:31:56
#431023
Você tem de fazer algo assim, deve ter de corrigir porem ao invez de fazer um subselect tem de fazer um inner

SELECT
p.Codigo,
p.Valor,
p.data,
p.Vendedor
a.Descricao
FROM
Pedidos p
INNER JOIN (
select

*
from
pedidostatus x where x.CodPedido = p.codigo order by codigo desc limit 1
) a

WHERE a.statusdopedido = [ô]XXXXXXXXXX[ô]
FERDEAD 12/11/2013 13:27:31
#431036
Citação:

:
Você tem de fazer algo assim, deve ter de corrigir porem ao invez de fazer um subselect tem de fazer um inner

SELECT
p.Codigo,
p.Valor,
p.data,
p.Vendedor
a.Descricao
FROM
Pedidos p
INNER JOIN (
select

*
from
pedidostatus x where x.CodPedido = p.codigo order by codigo desc limit 1
) a

WHERE a.statusdopedido = [ô]XXXXXXXXXX[ô]



deu o erro: Unknown column [ô]p.codigo[ô] in [ô]where clause[ô]

acho que ele num tá achando a tabela Pedidos fora do inner join... ?!

FERDEAD 12/11/2013 14:40:31
#431042
OCELOT, estou utilizando o mysql query browser para executar a consulta... não estou no vb ainda... o erro retornado é do MySQL!
FILMAN 12/11/2013 15:00:14
#431044
Caro FERDEAD

para um controle mais específico é interessante colocar um campo data no status para saber quando o mesmo sofreu alteração e dessa maneira você consegue fazer o retorno da consulta com mais eficiência.

depois de criado o campo DATA na tabela de status faça o seguinte SQL

SELECT p.Codigo, p.Valor, p.data, p.Vendedor,
(select descricao
from pedidostatus x
where x.CodPedido = p.codigo
[txt-color=#e80000]and x.data >= p.data[/txt-color]
order by codigo desc limit 1
) as Status
FROM Pedidos p


Espero ter ajudado
FERDEAD 12/11/2013 17:16:30
#431056
FILMAN, eu até tenho o campo data nas duas tabelas, mas não é esse o problema exatamente...

eu queria filtrar os pedidos pelo status, por exemplo, quero pegar todos os pedidos que estão [Ô]em produção[Ô] ou [Ô]cancelado[Ô]..
OCELOT 12/11/2013 18:09:04
#431059
Resposta escolhida
Me desculpe pela minha outra resposta, não sei como postei aqui a resposta que deveria ser de outro tópico, isso é o que dá abrir várias abas cada uma em um tópico diferente...


Mas é o seguinte, se a sua primeira SQL funciona mas o que falta é poder filtrar pelo status o que acontece é que você não pode usar o campo status no WHERE, porém você pode colocar novamente a sub select nele

SELECT
p.Codigo, p.Valor, p.data, p.Vendedor, (select descricao from pedidostatus x where x.CodPedido = p.codigo order by codigo desc limit 1) as Status
FROM
Pedidos p
WHERE
(select descricao from pedidostatus x where x.CodPedido = p.codigo order by codigo desc limit 1) = [ô]ENTREGUE[ô]

Não testei no MySQL aqui porque não tenho ele, mas funciona no SQL Server desta forma, mudando apenas o limit 1 pelo TOP 1 do SQL Server
FILMAN 12/11/2013 20:02:53
#431065
você pode estar utilizando da mesma maneira

SELECT p.Codigo, p.Valor, p.data, p.Vendedor,
(select descricao
from pedidostatus x
where x.CodPedido = p.codigo
and x.data >= p.data
and x.descricao in ([ô]ENTREGUE[ô],[ô]FIALIZADO[ô])
) as Status
FROM Pedidos p



veja se te ajuda
FERDEAD 13/11/2013 19:24:02
#431106
Da maneira do OCELOT deu certinho... vlw !!!
Tópico encerrado , respostas não são mais permitidas