SnakeX 1 Denunciar post Postado Março 7, 2012 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
giesta 29 Denunciar post Postado Março 9, 2012 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