Ir para conteúdo

POWERED BY:

Arquivado

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

SnakeX

Query com LEFT JOIN

Recommended Posts

Eu tenho esta query:

		SELECT
		`customers`.*,
   		COUNT(`orders`.`id`) as `orders_total`,

   		`last_order`.`id` as `last_id`, 
   		`last_order`.`order_id` as `last_order_id`, 
   		`last_order`.`date_added` as `last_date_added`
   	FROM `customers`
   	LEFT JOIN `orders` ON `orders`.`customer_id` = `customers`.`id`
   	LEFT JOIN `orders` as `last_order` ON `last_order`.`customer_id` = `customers`.`id`

   	GROUP BY `customers`.`id`

 

 

 

O que estou a tentar fazer é o seguinte, obter a lista de clientes, contar o total de encomendas deste cliente e obter também os dados da ultima encomenda deste cliente também...

 

Problemas:

- Não consigo obter o registo da ultima encomenda;

- Ao usar o segundo left join na query o total das encomendas orders_total não fica correcto.

 

 

Já pesquisei no google e encontrei montes de "soluções" algumas funcionam mas só retorna 1 registo :c

 

[sELECT

customers.*,

COUNT(t.id) as orders_total,

orders.*

FROM

customers

JOIN orders as t ON (customers.id = t.customer_id)

JOIN orders ON (customers.id = orders.customer_id)

LEFT OUTER JOIN orders last_order ON (customers.id = last_order.customer_id AND

(orders.date_added < last_order.date_added OR orders.date_added = last_order.date_added AND orders.id < last_order.id))

WHERE last_order.id IS NULL;/code]

 

 

Esta query aqui faz o que pretendo, mas só retorna um registo.....

 

Eu sei que dá para fazer, pois eu já consegui fazer isso uma vez, mas já não me lembro de como consegui e já não tenho o código :\

Compartilhar este post


Link para o post
Compartilhar em outros sites

Partindo do principio q na sua tabela custumer o cliente soh aparece uma vez....

 

SELECT *
FROM customers c
LEFT JOIN (select customer_id id,count(*) qtde_ordens from orders group by customer_id)q on q.id = c.id
LEFT JOIN (select customer_id id,max(date_added) ultimo_pedido from orders group by customer_id)u on u.id = c.id

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.