Ir para conteúdo

POWERED BY:

Arquivado

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

matheusmarson

[Resolvido] Consulta com duas tabelas

Recommended Posts

Senhores, boa tarde

 

Estou com uma dificuldade aqui para listar o resultado de uma consulta sql pela ordem do registro mais recente de uma das tabelas.

Tenho duas tabelas:

pedidos (id, data_pedido, login, tipo_pagamento, tipo_envio, valor_entrega, valor_compra, valor_desconto)

e a pedidos_status (id, status, data, descricao, id_pedido) onde id_pedido é uma chave para o campo id da tabela pedidos

 

Eu necessito que sejam mostrados todos os pedidos existentes na tabela pedidos com a status mais atual ou seja o último registro do pedido inserido na tabela pedidos_status

Estou fazendo a seguinte consulta:

 

SELECT p.id, p.data_pedido, p.login, p.tipo_pagamento, p.tipo_envio, p.valor_entrega, p.valor_compra, p.valor_desconto, s.status

FROM pedidos p, pedidos_status s

WHERE (s.status <> 'Pedido Finalizado' AND s.status <> 'Pedido Cancelado') AND s.id_pedido=p.id

GROUP BY s.id_pedido

ORDER BY s.data DESC, p.id

 

Esta consulta está me retornando os pedidos existentes mais com o status mais antigo, ou seja o primeiro que foi inserido na tabela.

 

Alguém poderia me dar uma ajuda?

 

Desde já agradeço a atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que seria algo assim :

 

 

SELECT p.id, p.data_pedido, p.login, p.tipo_pagamento, p.tipo_envio, p.valor_entrega, p.valor_compra, p.valor_desconto, s.status
FROM pedidos p, pedidos_status s
WHERE (s.status <> 'Pedido Finalizado' AND s.status <> 'Pedido Cancelado') AND s.id_pedido=p.id
and s.data = (select max(data)
             from pedidos_status s2
             where s2.<chave> = s1.<chave>)
GROUP BY s.id_pedido
ORDER BY s.data DESC, p.id

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, tentei representar o teu ambiente:

criei 2 tabelas

mysql> describe pedidos;
+-------------+---------+------+-----+---------+----------------+
| Field       | Type    | Null | Key | Default | Extra          |
+-------------+---------+------+-----+---------+----------------+
| id          | int(11) | NO   | PRI | NULL    | auto_increment |
| data_pedido | date    | YES  |     | NULL    |                |
+-------------+---------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> describe pedidos_status;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| data      | date        | YES  |     | NULL    |                |
| status    | varchar(30) | YES  |     | NULL    |                |
| pedido_id | int(11)     | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> 

 

com os seguintes registros:

mysql> select * from pedidos;
+----+-------------+
| id | data_pedido |
+----+-------------+
|  1 | 2011-05-11  |
|  2 | 2011-05-11  |
+----+-------------+
2 rows in set (0.00 sec)

mysql> select * from pedidos_status;
+----+------------+------------+-----------+
| id | data       | status     | pedido_id |
+----+------------+------------+-----------+
|  1 | 2011-05-10 | Finalizado |         1 |
|  2 | 2011-05-09 | Finalizado |         1 |
|  3 | 2011-05-11 | Finalizado |         2 |
|  4 | 2011-05-12 | Finalizado |         1 |
+----+------------+------------+-----------+
4 rows in set (0.00 sec)

mysql> 

 

e fiz a seguinte query:

select p.id, p.data_pedido, s.id, MAX(s.data) AS data, s.status, s.pedido_id from pedidos p, pedidos_status s WHERE s.pedido_id=p.id GROUP BY s.pedido_id ORDER BY p.id;
+----+-------------+----+------------+------------+-----------+
| id | data_pedido | id | data       | status     | pedido_id |
+----+-------------+----+------------+------------+-----------+
|  1 | 2011-05-11  |  1 | 2011-05-12 | Finalizado |         1 |
|  2 | 2011-05-11  |  3 | 2011-05-11 | Finalizado |         2 |
+----+-------------+----+------------+------------+-----------+
2 rows in set (0.00 sec)

mysql> 

 

então testa aí tua query assim:

 

SELECT p.id, p.data_pedido, p.login, p.tipo_pagamento, p.tipo_envio, p.valor_entrega, p.valor_compra, p.valor_desconto, s.status, MAX(s.data)

FROM pedidos p, pedidos_status s

WHERE (s.status <> 'Pedido Finalizado' AND s.status <> 'Pedido Cancelado') AND s.id_pedido=p.id

GROUP BY s.id_pedido

ORDER BY p.id

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nestes casos é sempre bom dizer qual a solução final pois pode vir a ajudar outra pessoa.

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.