Comunidad de diseño web y desarrollo en internet online

Consulta MySQL

Citar            
MensajeEscrito el 08 Oct 2015 10:43 pm
Hola, quiero hacer una consulta pero es muy complicado... Tengo las 2 tablas como siguientes:

TABLA1
NOMBRE-----PRECIOHORA
operario1-------10
operario2-------10
operario3-------20
operario4-------20
operario5-------15
operario6-------10

TABLA2
OPERARIO---HORAS
operario4-------3
operario2-------5
operario2-------1
operario2-------0.5
operario4-------4

Yo lo que quiero es sumar el total de hora por su respectivo precio, Osea serian 13.5 horas en total de las cuales 7 serian a 20 (140), y 6.5 a 10 (65). Multiplicando eso tendría que dar 205. Este 205 es el que quiero.

Alguien me puede ayudar?

Gracias por leerme y un saludo!!

Por circunsxik

32 de clabLevel



 

chrome
Citar            
MensajeEscrito el 09 Oct 2015 12:45 pm
¿Todo eso en una sola sentencia SQL?, bueno, veamos. Hay que hacerlo en partes, al menos dos partes.

La estructura de las tablas es la siguiente:

Código :

operarios
id   nombre   preciohoras
1   Operario 1   10
2   Operario 2   10
3   Operario 3   20
4   Operario 4   20
5   Operario 5   15
6   Operario 6   10

trabajosoperarios
id_operario   horas
4   3
2   5
2   1
2   0.5
4   4



Primero hay que obtener la cantidad de horas trabajadas por cada operario:

Código MySQL :

      SELECT `id_operario`, SUM(`horas`) AS `horastrabajadas`
      FROM `trabajosoperarios`
      GROUP BY `id_operario`



Teniendo este dato, se puede asociar el resultado de esta consulta con la tabla que contiene el precio por hora de cada operario:

Código MySQL :

SELECT *
FROM `operarios`,
   (
      SELECT `id_operario`, SUM(`horas`) AS `horastrabajadas`
      FROM `trabajosoperarios`
      GROUP BY `id_operario`
   ) AS `operarios_horastrabajadas`
WHERE
`operarios`.`id` = `operarios_horastrabajadas`.`id_operario`


No es exactamente lo que se necesita, pero es muy simple obtener el total en $$$ de las horas trabajadas:

Código MySQL :

SELECT *, (`operarios_horastrabajadas`.`horastrabajadas`*`operarios`.`preciohoras`) AS `total`
FROM `operarios`,
   (
      SELECT `id_operario`, SUM(`horas`) AS `horastrabajadas`
      FROM `trabajosoperarios`
      GROUP BY `id_operario`
   ) AS `operarios_horastrabajadas`
WHERE
`operarios`.`id` = `operarios_horastrabajadas`.`id_operario`



Ahora solamente tienes que recorrer la tabla resultante de esta consulta e ir sumando la columna `total`.

Por DriverOp

Claber

2510 de clabLevel



 

chrome
Citar            
MensajeEscrito el 19 Oct 2015 12:00 pm

DriverOp escribió:

¿Todo eso en una sola sentencia SQL?, bueno, veamos. Hay que hacerlo en partes, al menos dos partes.

La estructura de las tablas es la siguiente:

Código :

operarios
id   nombre   preciohoras
1   Operario 1   10
2   Operario 2   10
3   Operario 3   20
4   Operario 4   20
5   Operario 5   15
6   Operario 6   10

trabajosoperarios
id_operario   horas
4   3
2   5
2   1
2   0.5
4   4



Primero hay que obtener la cantidad de horas trabajadas por cada operario:

Código MySQL :

      SELECT `id_operario`, SUM(`horas`) AS `horastrabajadas`
      FROM `trabajosoperarios`
      GROUP BY `id_operario`



Teniendo este dato, se puede asociar el resultado de esta consulta con la tabla que contiene el precio por hora de cada operario:

Código MySQL :

SELECT *
FROM `operarios`,
   (
      SELECT `id_operario`, SUM(`horas`) AS `horastrabajadas`
      FROM `trabajosoperarios`
      GROUP BY `id_operario`
   ) AS `operarios_horastrabajadas`
WHERE
`operarios`.`id` = `operarios_horastrabajadas`.`id_operario`


No es exactamente lo que se necesita, pero es muy simple obtener el total en $$$ de las horas trabajadas:

Código MySQL :

SELECT *, (`operarios_horastrabajadas`.`horastrabajadas`*`operarios`.`preciohoras`) AS `total`
FROM `operarios`,
   (
      SELECT `id_operario`, SUM(`horas`) AS `horastrabajadas`
      FROM `trabajosoperarios`
      GROUP BY `id_operario`
   ) AS `operarios_horastrabajadas`
WHERE
`operarios`.`id` = `operarios_horastrabajadas`.`id_operario`



Ahora solamente tienes que recorrer la tabla resultante de esta consulta e ir sumando la columna `total`.


Hola, DriverOp! Perdona que no te contestara antes. No me di cuenta que me habías respondido y ya lo solucione con algo similar a tu respuesta pero sabes que no me enteraba mucho? Y tu respuesta me servirá para entenderlo, porque me lo has explicado muy bien!

Muchas gracias y perdona la tardanza!

Saludos!!

Por circunsxik

32 de clabLevel



 

chrome
Citar            
MensajeEscrito el 19 Oct 2015 12:53 pm
Pues de nada...

Por DriverOp

Claber

2510 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.