Ir al contenido


Foto

multiplicar columnas de un join por campos de un registro


  • Por favor identifícate para responder
15 respuestas en este tema

#1 kolly1984

kolly1984

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 11 septiembre 2012 - 10:29

Hola a todos,

Gracias por su colaboración, estoy creando un sistema para pagos de trabajadores y necesito multiplicar columnas resultantes de un JOIN por los campos de un solo registro.

  • Tengo la tabla trabajadores con los campos id_trabajador, nombre_trabajador,....
  • Tambien la tabla turnos del mes donde relaciono el id_de un trabajador con la cantidad de horas que trabaja mediante los campos  horas_dia, horas noche, horas_diurno_festivo, horas_nocturno_festivo,...
  • Por ultimo tengo una tabla con un unico registro en donde cada campo tiene el valor de cada tipo de hora es decir valor_hora_dia, valor_hora_noche, valor_festivo_diurno,... si el usuario desea modificarlo, debe modificar el registro id1 sin añadir mas registros

Necesito hallar el valor de multiplicar cada columna por su campo correspondiente en la tercera tabla y mostrar una nueva columna que se llamaria pago_trabajador

Actualmente mi código va asi:



delphi
  1. SELECT * FROM turnos JOIN trabajadores ON ( turnos.id_trabajador = trabajadores.id_trabajador )



Cualquier ayuda les estaré muy agradecido

:)

  • 0

#2 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 12 septiembre 2012 - 01:29

Buenas,

Dado que sólo es un registro el que contiene el precio por tipo de hora, yo haría los cálculos (una sencilla multiplicación) en el aplicativo, no me molestaría en hacerlo en la sentencia SQL, dado que si lo haces en el SQL, éste se complica y, dependiendo de la cantidad de registros, puede ralentizar la sentencia SQL

Nos leemos

  • 0

#3 kolly1984

kolly1984

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 12 septiembre 2012 - 02:14

Bien gracias por responder, entonces creo dos consultas a mysql en el mismo documento php para poder añadir la nueva tabla y. como tendria que colocar los dos arrays y hacer las multiplicaciones respectivas??
  • 0

#4 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 12 septiembre 2012 - 02:59

Buenas,

Bueno, yo no soy programador php, así que eso ya se lo dejo a los programadores php (aunque tu como programador php ya deberías de saber hacer esas cosas)  ;)
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 12 septiembre 2012 - 07:27

Pues aún no has indicado la relación entre la segunda y tercera tabla. Si no existe una relación pues deberás hacerlo a "pelos", por ejemplo:

if (!empty($row['horas_dias']) || $row['horas_dias'] <> null) {
 
  $Multiplica = $row['horas_dias'] * $valor['valor_horas_dias'];
  $echo 'Total a Pagar: ' . $Multiplica;
}


Con eso te doy una idea por donde empezar ;)

Saludos.
  • 0

#6 kolly1984

kolly1984

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 12 septiembre 2012 - 09:45

pues el hecho es que no hay un campo que relacione las primeras 2 tablas de la tercera como tal... como te digo en la tercera solo hay un registro con id 1 el cual en sus campos contiene el valor en $ de las horas diurnas, nocturnas, festivos,.... estos mismos campos existen en la segunda tabla y tu seleccionas si se hicieron tantas horas diurnas, tantas tantas horas nocturnas,.... la idea es que si el trabajador hizo solo horas diurnas pues entonces los demás campos quedan marcados como 0 y al multiplicarse por su equivalente en la tercera tabla se obtendría el resultado en $ de la cantidad de horas trabajadas.

Por ese motivo no he hecho un JOIN con la tercera tabla, no habría que poner en WHERE para comparar las 2 tablas (podría hacerlo de alguna manera?), lo que he pensado hasta ahora pues seria hacer 2 consultas a MySQL en la primera pongo el codigo que ya especifique mas arriba y en la otra llamaría a la tercera tabla con un SELECT * FROM valores_horas y luego, como organizaría la información para que los 2 arrays a los que tendria que llamar (o podria hacerlo en solo 1?) funcionen correctamente y me muestren el resultado de la operacion deseada?

Gracias por su ayuda... va abriendo la mente....
  • 0

#7 kolly1984

kolly1984

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 12 septiembre 2012 - 09:56

Buenas,

Bueno, yo no soy programador php, así que eso ya se lo dejo a los programadores php (aunque tu como programador php ya deberías de saber hacer esas cosas)  ;)


Pues te cuento enecumene que yo tampoco soy programador, soy musico... simplemente estaba viendo el curso dephp y mysql y de cesar cancino y decidi a aventurarme, siempre me han gustado los sistemas pero esta es mi primera exploracion con mysql y php, y ahi vamos.... gracias por tu ayuda!
  • 0

#8 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 12 septiembre 2012 - 10:14

Pues me estais confundiendo con mi estimadíssimo colega cadetill :)
  • 0

#9 kolly1984

kolly1984

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 12 septiembre 2012 - 10:22

jejeje es cierto lo siento
  • 0

#10 kolly1984

kolly1984

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 12 septiembre 2012 - 11:20

pues el hecho es que no hay un campo que relacione las primeras 2 tablas de la tercera como tal... como te digo en la tercera solo hay un registro con id 1 el cual en sus campos contiene el valor en $ de las horas diurnas, nocturnas, festivos,.... estos mismos campos existen en la segunda tabla y tu seleccionas si se hicieron tantas horas diurnas, tantas tantas horas nocturnas,.... la idea es que si el trabajador hizo solo horas diurnas pues entonces los demás campos quedan marcados como 0 y al multiplicarse por su equivalente en la tercera tabla se obtendría el resultado en $ de la cantidad de horas trabajadas.

Por ese motivo no he hecho un JOIN con la tercera tabla, no habría que poner en WHERE para comparar las 2 tablas (podría hacerlo de alguna manera?), lo que he pensado hasta ahora pues seria hacer 2 consultas a MySQL en la primera pongo el codigo que ya especifique mas arriba y en la otra llamaría a la tercera tabla con un SELECT * FROM valores_horas y luego, como organizaría la información para que los 2 arrays a los que tendria que llamar (o podria hacerlo en solo 1?) funcionen correctamente y me muestren el resultado de la operacion deseada?

Gracias por su ayuda... va abriendo la mente....


Alguna idea?
  • 0

#11 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 12 septiembre 2012 - 11:50

Si entendí la estructura de tus tablas, la consulta para obtener el costo de cada hora sería la siguiente





      SELECT TRABAJADORES.ID_TRABAJADOR,
            TURNOS.HORAS_DIA * VALOR_HORA_DIA,
            TURNOS.HORAS_NOCHE * VALOR_HORA_NOCHE,
            TURNOS.HORAS_DIURNO_FESTIVO * VALOR_HORA_FESTIVO_DIURNO
            TURNOS.HORAS_NOCTURNO_FESTIVO * VALOR_HORA_FESTIVO_NOCTURNO 
        FROM TRABAJADORES
  INNER JOIN TURNOS
          ON TRABAJADORES.ID_TRABAJADOR = TURNOS.ID_TRABAJADOR
    LEFT JOIN TABLACOSTOS
          ON 1 = 1








  • 0

#12 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 12 septiembre 2012 - 01:01

Buenas

Creo que entre la tabla TRABAJADORES y la tabla TURNOS hay una relación 1-N, por lo que en el SQL faltaría un sumatorio (si no he entendido mal la relación)

PD: eso del 1 = 1 me ha dejado atónito :|, no se me hubiera ocurrido nunca jejejeje

  • 0

#13 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 13 septiembre 2012 - 06:23

PD: eso del 1 = 1 me ha dejado atónito :|, no se me hubiera ocurrido nunca jejejeje


Estamos es las mismas :D :D
  • 0

#14 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 13 septiembre 2012 - 07:40


PD: eso del 1 = 1 me ha dejado atónito :|, no se me hubiera ocurrido nunca jejejeje


Estamos es las mismas :D :D


jajajajaja truquillos que va aprendiendo uno sobre la marcha amigos... Si algo me gusta más que delphi es precisamente el trabajo en base de datos...

Saludox
  • 0

#15 kolly1984

kolly1984

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 16 septiembre 2012 - 11:37

Hola,

Que pena la demora en responder he estado un poco ocupado en otros asuntos. La consulta se ejecuta muy bien, es justo lo que quería, sin embargo me deja pensando lo que dice cadetill:

Dado que sólo es un registro el que contiene el precio por tipo de hora, yo haría los cálculos (una sencilla multiplicación) en el aplicativo, no me molestaría en hacerlo en la sentencia SQL, dado que si lo haces en el SQL, éste se complica y, dependiendo de la cantidad de registros, puede ralentizar la sentencia SQL...


Sera que abria una manera de hacerlo mejor?
  • 0

#16 kolly1984

kolly1984

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 16 septiembre 2012 - 01:48

Muy bien, ya encontré la solución:

primero creo toda la parte de la consulta en la cual uno todas las tablas necesarias pero solo llamo los campos sin necesidad de hacer las operaciones directamente para no sobrecargar a mysql:


<?php
$con=mysql_connect("localhost","root","contraseña") or die ("Error al contactar base de datos");
$bd=mysql_select_db("base_de_datos") or die ("Verifique la base de datos");
$sql="

SELECT * FROM
tabla_trabajadores
JOIN
tabla_turnos
ON (
tabla_trabajadores.id_trabajador = tabla_turnos.id_trabajador
)
LEFT JOIN
tabla_valores_turnos
ON(
1 = 1
)
";
$res=mysql_query($sql);
?>


luego ya que todo queda en una sola consulta puedo crear un solo array y dentro de el generar las operaciones aritmeticas necesarias:




<table>
<tr>
<td align="center" valign="top">
ID TURNO
</td>
<td align="center" valign="top">
ID TRABAJADOR
</td>
<td align="center" valign="top">
NOMBRE DEL TRABAJADOR
</td>
<td align="center" valign="top">
HORAS DIA
</td>
<td align="center" valign="top">
HORAS NOCHE
</td>
<td align="center" valign="top">
VALOR HORAS DIA
</td>
<td align="center" valign="top">
VALOR HORAS NOCHE
</td>
</tr>
<?php
while ($reg=mysql_fetch_array($res))
{
?>
<tr>
<td align="center" valign="top">
<?php echo $reg["id_turno"];?>
</td>
<td align="center" valign="top">
<?php echo $reg["id_trabajador"];?>
</td>
<td align="center" valign="top">
<?php echo $reg["nombre_trabajador"];?>
</td>
<td align="center" valign="top">
<?php echo $reg["horas_dia"];?>
</td>
<td align="center" valign="top">
<?php echo $reg["horas_noche"];?>
</td>
<td align="center" valign="top">
<?php echo ($reg["horas_dia"]*$reg["valor_horas_dia"]);?>
</td>
<td align="center" valign="top">
<?php echo ($reg["horas_noche"]*$reg["valor_horas_noche"]);?>
</td>
</tr>
<?php
};
?>
</table>


Gracias a todos por su valiosa ayuda!!
  • 0




IP.Board spam blocked by CleanTalk.