Jump to content

Ayuda consulta SQL de productos comprados por un cliente en un rango de fecha.


Recommended Posts

Hola!

Por más que he buscado no he encontrado una consulta SQL que muestre todos los productos que ha comprado un cliente específico (filtrando por su ID de cliente) en un rango de fechas concreto.

 

He llegado a esta consulta SQL pero me da error "El atributo "id_customer" no existe en la tabla "ps_order_detail" y no se si el resto esta correcto, además de que no he podido incluir todo lo que necesito.

SELECT CONCAT_WS(  ' ', g.firstname, g.lastname ) AS CLIENTE, d.product_name AS PRODUCTO, d.product_price AS PRECIO, d.product_quantity AS CANTIDAD
FROM ps_order_detail o LEFT JOIN ps_customer c ON c.id_customer = o.id_customer LEFT JOIN ps_order_detail n ON n.id_order = o.id_order
WHERE o.customer_id = 80;
BETWEEN  '2017-09-01'
AND  '2017-09-30'

Seguro que es muy sencillo, pero no tengo idea de cómo hacerlo para que muestre correctamente los datos, así que os transmito lo que necesito en la consulta:

 

- id del pedido (a ser posible ordenar por ID de pedido)

- producto (nombre del producto, con sus atributos/combinaciones)

- precio unitario que ha pagado (el precio que muestra en los detalles del pedido para ese cliente con impuestos incluidos)

- cantidad (unidades compradas en ese pedido)

- Total por producto (multiplicar el precio x cantidad)

En un rango de fecha determinado.

 

¿Alguien me podría ofrecer su ayuda y escribir por aquí la consulta correcta?

Gracias!! :wub:

Link to comment
Share on other sites

De momento puedes empezar por algo asi

SELECT CONCAT_WS( ' ', c.firstname, c.lastname ) AS CLIENTE, o.product_name AS PRODUCTO, o.product_price AS PRECIO, o.product_quantity AS CANTIDAD FROM ps_order_detail o LEFT JOIN ps_orders os ON os.id_order = o.id_order LEFT JOIN ps_customer c ON c.id_customer = os.id_customer WHERE os.id_customer = 1 AND os.date_add BETWEEN '2017-01-01' AND '2017-12-30'
  • Like 1
Link to comment
Share on other sites

Muchas gracias ventura  ¡Funciona al a perfección! :)

 

Por último, una duda más si es posible:

Necesito poder hacer una consulta donde muestre el último precio de coste de cada producto en existencias. El precio de coste es el que:

- En el apartado Existencias > Gestión de Existencias, cuando damos a "Añadir existencias" nos aparece la celda rellenable "Precio unitario (sin IVA)"

mi duda es ¿En qué tabla de la base de datos y con qué atributo se guarda este valor?

 

Sé que Prestashop lo usa para calcular el valor total de existencias en un almacén, pero por más que he buscado, no encuentro dónde guarda "Precio unitario (sin IVA)" una vez que añadimos un producto a la gestión de existencias.

 

¿Alguién me podría ayudar? Gracias!!!!

 

 

Link to comment
Share on other sites

¿En qué tabla de la base de datos y con qué atributo se guarda este valor?

 

Hola de nuevo! Ya he averiguado en que tabla está "Precio unitario (sin IVA)":

Está en la tabla ps_stock_mvt y el atributo es: price_te

 

Ahora solo me faltaría saber cómo crear una nueva columna con el valor de price_te de la tabla "ps_stock_mvt" correspondiente a cada fila de producto de la consulta que ventura tan amablemente escribió en su mensaje.

SELECT CONCAT_WS( ' ', c.firstname, c.lastname ) AS CLIENTE, o.product_name AS PRODUCTO, o.product_price AS PRECIO, o.product_quantity AS CANTIDAD 
FROM ps_order_detail o 
LEFT JOIN ps_orders os ON os.id_order = o.id_order 
LEFT JOIN ps_customer c ON c.id_customer = os.id_customer 
WHERE os.id_customer = 1 
AND os.date_add 
BETWEEN '2017-01-01' 
AND '2017-12-30'

¿Sabría alguien como incluir en esta consulta el price_te de la tabla ps_stock_mvt ?

 

Gracias por adelantado! :wub:

Link to comment
Share on other sites

Hola!

He estado mirando y he avanzado en algo:

SELECT o. `id_order` AS PEDIDO, n.`product_name` AS PRODUCTO, l.`price_te` AS COSTE
FROM `ps_orders` o
LEFT JOIN `ps_order_detail` n ON n.`id_order` = o.`id_order` 
LEFT JOIN `ps_stock` l ON  n.`product_quantity`=  l.`physical_quantity`
WHERE 1 AND o.`date_add` >= '2017-09-01 0:0:0' 
AND o.`date_add` <= '2017-09-30 23:59:59'
LIMIT 0 , 50 
pero me salen los productos en filas repetidas y parece todo un caos,

¿cómo podría unir estas tres tablas en una sola consulta de forma correcta?

¿qué estoy haciendo mal?

¿Alguien podría ayudarme?

Gracias!!

Link to comment
Share on other sites

  • 2 years later...

Me respondo a mi mismo, ya lo tengo... he añadido tambien aparezca numero de pedido, espero os ayude, saludos

la consulta sql es:

SELECT CONCAT_WS( ' ', c.firstname, c.lastname ) AS CLIENTE, o.product_name AS PRODUCTO, o.product_price AS PRECIO, o.product_quantity AS CANTIDAD,o.id_order AS PEDIDO 
FROM ps_order_detail o 
LEFT JOIN ps_orders os ON os.id_order = o.id_order 
LEFT JOIN ps_customer c ON c.id_customer = os.id_customer 
WHERE o.`product_id` = xxxx (añadir la id de vuestro producto)
AND os.date_add 
BETWEEN '2017-01-01' 
AND '2022-12-30'

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...