Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

una solución a este query

Estas en el tema de una solución a este query en el foro de Mysql en Foros del Web. hola a tod@s os comento en mi base de datos está compuesta por 3 tablas : 1)cliente(id(primary key),nombre,descrp) 2)compra(id(primay key),id_cliente,id_prod,cantidad,fecha) 3)producto(id(primary key),descrp,precio) (siendo id_cliente es ...
  #1 (permalink)  
Antiguo 15/04/2008, 10:23
 
Fecha de Ingreso: enero-2008
Mensajes: 88
Antigüedad: 16 años, 3 meses
Puntos: 0
una solución a este query

hola a tod@s
os comento en mi base de datos está compuesta por 3 tablas :
1)cliente(id(primary key),nombre,descrp)
2)compra(id(primay key),id_cliente,id_prod,cantidad,fecha)
3)producto(id(primary key),descrp,precio)
(siendo id_cliente es una clave foranea de id de la tabla cliente)
(siendo id_prod es una clave foranea de id de la tabla producto)
con esta consulta :
Código PHP:
select cliente.nombre,producto.descrp,producto.precio,compra.cantidad,producto.precio compra.cantidad AS total from 
cliente
,producto,compra where  compra.id_cliente =cliente.id and 
compra.id_prod=producto.id 
saco los siguientes datos:
nombre descp precio cantidad total
manuel memoria 36.05 89 3208.45
manuel memoria 36.05 45 1622.25
manuel lamparas 5.78 5 28.90
alvaro monitores 80.00 12 960.00
ahora quiero k en vez de sacar eso haber si hay alguna posiblidad mediante un query de sacar el total de compra de cada cliente junto con el numero de articulos(p.e)
un query que tiene como resultado:
nombre desc precio cantidad total
manuel memoria 36.05 89 3208.45
manuel memoria 36.05 45 1622.25
manuel lamparas 5.78 5 28.90
----------------------------------------------------------
sum(total) 4859.60 3(*)
3(*): es el numero de regitros o articulos de cada cliente.
gracias por vuestra colaboración
saludos
  #2 (permalink)  
Antiguo 15/04/2008, 10:34
 
Fecha de Ingreso: abril-2008
Ubicación: ALICANTE
Mensajes: 17
Antigüedad: 16 años
Puntos: 0
Re: una solución a este query

ola buenas, stoy manejando ahora mismo sql server 2005 y creo que eso que dices se puede hacer asi:

select cliente.nombre,producto.descrp,producto.precio,com pra.cantidad,producto.precio * compra.cantidad AS total
from cliente,producto,compra
where compra.id_cliente =cliente.id
and compra.id_prod=producto.id
compute sum(producto.precio * compra.cantidad), count(producto.descrp)

pruebalo en mysql o informate si existe algo equivalente. ya me diras como ha ido. un saludo
  #3 (permalink)  
Antiguo 15/04/2008, 10:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
con group by cliente

En MySQL, algo así, aunque también podrías usar la opción de INNER JOIN para relacionar las tres tablas.
SELECT cliente.nombre, SUM(producto.precio*compra.cantidad) AS total, SUM (compra.cantidad) AS numartículos FROM cliente,producto,compra
where compra.id_cliente =cliente.id
and compra.id_prod=producto.id
GROUP BY cliente.id ORDER by cliente.nombre
  #4 (permalink)  
Antiguo 15/04/2008, 12:16
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Re: una solución a este query

jurena que tal por caceres, como está el tiempo? que voy al Extremusika este finde!

En realidad, pikeres tambien está haciendo un INNER JOIN, solo que está utilizando una notación antigua.

chouki si lo que quieres es sacar una "fila" al final que te de la suma, del modo:

nombre desc precio cantidad total
manuel memoria 36.05 89 3208.45
manuel memoria 36.05 45 1622.25
manuel lamparas 5.78 5 28.90
3 4859.60

Se puede hacer, pero es poco eficiente y poco elegante, mejor hacerlo en la aplicación que acceda a la BD, es mucho más facil.


Otra opcion, es añadir otra columna (en lugar de una fila al final), del tipo:

nombre desc precio cantidad total total_gasto_cliente total_compras_cliente
manuel memoria 36.05 89 3208.45 4859.60 3
manuel memoria 36.05 45 1622.25 4859.60 3
manuel lamparas 5.78 5 28.90 4859.60 3

Pero sigue siendo mejor hacerlo en la aplicación.

Un saludo
  #5 (permalink)  
Antiguo 15/04/2008, 13:05
 
Fecha de Ingreso: enero-2008
Mensajes: 88
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: una solución a este query

gracias
pickeres,jurena,seyko por vuestra soluciones,la verdad tu solución seyko me gusto mucho lo suyo será añadir un par de columnas: con total de cada compra
pero a lo k vamos hay que busacr un query que lo hace.
muchisima gracias.
saludos
  #6 (permalink)  
Antiguo 15/04/2008, 14:36
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Re: una solución a este query

chouki, me alegro; seyko, espero que lo pases bien en esta acogedora ciudad. En cuanto al tiempo, esta noche casi hasta hace calor: esperemos que no se os estropee el concierto.
Quiero hacer una aclaración: yo también pensaba que eran equivalentes los INNER JOIN a los WHERE = sobre índices hasta hace algún tiempo, pero he leído que en caso de multitablas relacionadas siempre es preferible el inner join; al parecer es una cuestión de optimización de índices, pero yo no sabría precisarte. Por lo que se refiere a la presentación de datos, yo también utilizaría PHP (es el programa que conozco) para presentarlos.

Última edición por jurena; 15/04/2008 a las 14:51
  #7 (permalink)  
Antiguo 16/04/2008, 02:15
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Re: una solución a este query

Cita:
Iniciado por jurena Ver Mensaje
chouki, me alegro; seyko, espero que lo pases bien en esta acogedora ciudad. En cuanto al tiempo, esta noche casi hasta hace calor: esperemos que no se os estropee el concierto.
Quiero hacer una aclaración: yo también pensaba que eran equivalentes los INNER JOIN a los WHERE = sobre índices hasta hace algún tiempo, pero he leído que en caso de multitablas relacionadas siempre es preferible el inner join; al parecer es una cuestión de optimización de índices, pero yo no sabría precisarte. Por lo que se refiere a la presentación de datos, yo también utilizaría PHP (es el programa que conozco) para presentarlos.
gracias, estudié 5 años en caceres ;)

En realidad es igual, en postgres, el planificador prepara la consulta de la misma forma, independientemente de la notación utilizada. Es mejor, más limpio y más facil de leer/entender hacer el join en el from y dejar el where para los criterios de filtrado.
Hace algun tiempo, quizas fuera mejor utilizar una notación que otra, pero los planificadores están muy avanzados y preparan un plan de consulta similar.

Un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:05.