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

Consulta usando 2 tablas + campo calculado

Estas en el tema de Consulta usando 2 tablas + campo calculado en el foro de Mysql en Foros del Web. ¿Que tal? tengo una duda, quizá la solución se simple y no lo que yo pienso.. Tengo 3 tablas (clientes, artículos y pedidos) en artículos ...
  #1 (permalink)  
Antiguo 23/05/2010, 00:18
 
Fecha de Ingreso: junio-2009
Ubicación: Chihuahua
Mensajes: 27
Antigüedad: 14 años, 9 meses
Puntos: 0
Consulta usando 2 tablas + campo calculado

¿Que tal? tengo una duda, quizá la solución se simple y no lo que yo pienso..

Tengo 3 tablas (clientes, artículos y pedidos)
en artículos los campos: precio y otros
en pedidos los campos: cantidad, total y otros.


¿Cómo hacer una consulta para calcular el total (multiplicar cantidad (en pedidos) con precio (en artículos))?

Soy principiante en BD, he leído algo de selects anidados pero según yo eso no soluciona la situación, ¿o si?.

Olvidaba mencionar, Pedidos tiene una PRIMARY KEY compuesta (3 campos (1 de tabla clientes, otra de pedidos y la última desde artículos)).
Uso MySQL community server 5.1.46 y php 5.3.2

¡ Sugerencias bienvenidas!
Gracias anticipadamente :)
  #2 (permalink)  
Antiguo 23/05/2010, 09:03
 
Fecha de Ingreso: septiembre-2007
Ubicación: Argentina
Mensajes: 29
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Consulta usando 2 tablas + campo calculado

Hola, no entendi bien como tenes hecha la db.. pero te dejo un ejemplo muy generico de como funcionaria con la estructura dada, hechale un vistazo y si es necesario modificala a tu necesidad

Tabla Clientes
-id
-nombre

Tabla Pedidos
-id
-id_clientes

Tabla Articulos
-id
-id_pedidos
-precio


Una query para obtener un listado de pedidos con su respectivo cliente y precio total de los articulos dentro, seria algo asi:

Código SQL:
Ver original
  1. SELECT pedidos.id
  2.      , clientes.nombre
  3.      , SUM( articulos.precio ) AS total
  4.   FROM pedidos
  5. INNER JOIN clientes
  6.         ON clientes.id = pedidos.id_clientes
  7. LEFT JOIN articulos
  8.        ON articulos.id_pedidos = pedidos.id
  9. GROUP BY pedidos.id

Explicacion:

El INNER JOIN lo que hace es unir la tabla de clientes, al ser un INNER, si el id_clientes de la tabla pedidos no existe en la tabla clientes, no va a devolver ese pedido.

El LEFT JOIN a la tabla articulos, une todos los registros de articulos asociados a ese pedido. Al ser un LEFT, si el pedido no tiene ningun articulo, de todas formas va a devolver el pedido, pero con precio = 0

Es muy importante el GROUP BY, ya que sin el, el resultado seria una fila por cada articulo, no por cada pedido.


Si en algun momento necesitas agregarle el IVA o algo de eso, podes jugar con las operaciones que MySQL te permite hacer, por ejemplo:

Código SQL:
Ver original
  1. ( SUM( articulos.precio ) + iva )  AS total

espero que te sirva.

Saludos
  #3 (permalink)  
Antiguo 23/05/2010, 10:54
 
Fecha de Ingreso: junio-2009
Ubicación: Chihuahua
Mensajes: 27
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Consulta usando 2 tablas + campo calculado

ok, ya lo analice y me sirve en cuanto a como obtener datos de varias tablas y ponerme a leer sobre los JOIN.

Mis tablas y sus campos:

Tabla Clientes
-id
-nombre
-tel
-saldo

Tabla Pedidos
-id
-idarticulo
-id_clientes
-cantidad
-total
-direccion_entrega

Tabla Articulos
-id
-nomarticulo
-descripcion
-precio

Si le capte a la idea de mostrar la sumatoria por cada pedido usando el GROUP BY. Pero lo que me atañe es usando Tabla articulos y Tabla pedidos, multiplicar precio (de articulos) con cantidad (de pedido) y eso reflejarlo en total (usar un AS).

Muchas gracias, estoy buscando como queda el query final.

Etiquetas: campos, consulta, php, query, tablas, vinculadas, calculadora
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 11:38.