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

[SOLUCIONADO] Duda Sobre modificar datos al realizar select

Estas en el tema de Duda Sobre modificar datos al realizar select en el foro de Mysql en Foros del Web. Buenos días a todos, hace unas semanas he publicado lo siguiente http://www.forosdelweb.com/f86/calcular-horas-trabajadas-1101234/ donde me han dado una respuesta a lo que necesitaba pero me quedaron ...
  #1 (permalink)  
Antiguo 17/06/2014, 08:05
 
Fecha de Ingreso: septiembre-2011
Mensajes: 35
Antigüedad: 12 años, 7 meses
Puntos: 0
Duda Sobre modificar datos al realizar select

Buenos días a todos, hace unas semanas he publicado lo siguiente http://www.forosdelweb.com/f86/calcular-horas-trabajadas-1101234/
donde me han dado una respuesta a lo que necesitaba pero me quedaron unas dudas.

Lo que me gustaría preguntar es como se haría cuando las personas se olvidan de marcar la salida o por ejemplo marcan 2 veces la entrada con diferencia de 1 seg (ejemplo) o marcan doble salida donde debería una ser entrada. La solución que he encontrado yo (aunque es algo tediosa para el usuario) es modificar y borrar los registros a mano por medio de un formulario que he hecho, pero si hubiese un método para automatizar esto seria espectacular.

Por otro lado al calcular las horas trabajadas se guardan en una tabla "ccte" que tiene cada usuario donde se guarda el tiempo que trabajo hasta el ultmio segundo. El problema en que me encuentro ahora y esto si seria una necesidad urgente seria lo siguiente, a la tabla que contiene las siguientes columnas

Id
Cedula
Nombre
Hora (aaaa-mm-dd hh:mm:ss)
Entrada (I-O) Int - Out
Fecha (aaaa-mm-dd)

le he agregado una mas que seria "Ingresado" donde los valores varían de 1 a 0 dependiendo si ese dia esta ingresado en la cttc del usuario. Ah lo que va mi pregunta, como hago para cuando calculo las horas del usuario con la función que me pasaron en el link que he publicado arriba, modificar la columna "ingresado" para cambiar un 0 por un 1 y así no tomar mas los registros que estén con 1 sino me tomaría 50 veces el mismo registro de un día y eso no estará nada bien como se darán cuenta.

Saludos
  #2 (permalink)  
Antiguo 18/06/2014, 03:12
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Duda Sobre modificar datos al realizar select

Con una consulta select no se puede hacer. Esa tabla seria una tabla caculada que en principio no es necesaria puesto que esa información ya esta en la tabla de marcages. Un error en la programación o en la ejecución puede dejar la bbdd en un estado incoherrente si los valores de esa tabla y la de los marcages no coinciden. Deberías pensartelo. En caso de que decidas crearla debes guardar ademas de la suma las fechas maximas y minima de los marcages ingresados para poderlas usar para discriminar los marcages en las posteriores sumas.

En cuanto a lo demas que preguntas ya te dige que depende de las reglas de teu negocio,

Cita:
Eso no se resuelve solo con una query, debes controlar cuantos marcages tiene cada trabajador en un dia, tratar los casos donde haya anomalias (entradas sin salidas, o salidas sin entradas....)
sql no sabe que hay que hacer con un trabajador que ha olvidado un marcage, el convenio que tengas entre empresa y trabajador debe especificar como se debe tratar y tu debes programar algo que se ajuste a lo que diga el convenio. Para los marcages con un segundo de diferencia seria mas facil imaginar una solución pero claro el convenio tembien puede decir algo al respecto.

Imagina que encontramos algo para detectar entradas sin salidas en el mismo dia, eso seria automatizable, pero si tienes un turno de trabajo nocturno ya no funcionaria. Me explico?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 18/06/2014, 10:08
 
Fecha de Ingreso: septiembre-2011
Mensajes: 35
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Duda Sobre modificar datos al realizar select

Disculpa pero no entendí lo que quisiste poner en el primer párrafo.
  #4 (permalink)  
Antiguo 19/06/2014, 00:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Duda Sobre modificar datos al realizar select

Un ejemplo simple, si tienes una tabla que guarda una serie de datos numericos digamos

Tabla1--->campo

Tabla1
1
2
3

no es necesaria y además altamente peligroso tener una tabla

TablaSuma
6

puesto que puedes hacer

Código MySQL:
Ver original
  1. SELECT SUM(campo) FROM Tabla1

sin necesidad de tener la TablaSuma.

Es peligroso por que cualquier cambio en Tabla1 debe ir emparejado con una actualización de TablaSuma, si por lo que sea se produce el cambio en Tabla1 y no en TablaSuma la base de datos queda incoherente.

Se entiende?

(A pesar de ello por razones de performance podría estar justificada la creación de esa tabla.)
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 21/06/2014, 20:45
 
Fecha de Ingreso: septiembre-2011
Mensajes: 35
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Duda Sobre modificar datos al realizar select

Entiendo lo que dices y parece correcto, pero el problema entonces seria como hago para sumar los horarios que ha hecho por ejemplo en el mes un empleado?

Código:
SELECT Ent.cedula,
             Ent.nombre,
             Ent.fecha,
             Ent.hora,
             Sal.hora,
             sec_to_time(timestampdiff(second,Ent.hora, Sal.hora)) TotalHoras
FROM
     (SELECT Cedula,Nombre,Fecha,hora
       FROM excel
       WHERE entrada="I") Ent
  INNER JOIN
    (SELECT Cedula,Nombre,Fecha,hora
      FROM excel
      WHERE Entrada="O") Sal
   ON Ent.fecha=Sal.Fecha
        AND Ent.Cedula=Sal.Cedula
Esa consulta me devuelvo los horarios pero si tiene 3 entradas y 3 salidas me devuelve por separado las horas trabajadas, como puedo hacer para sumar esos 3 registros (es un ejemplo) y que me aparezca la hora total (la suma de los 3 registros hora)



EDIT:

Pude hacerlo andar creando 2 vistas con una con cada select del from y una tercera que seria el select principal

Luego con la siguiente funcion pude calcular el total de horas de todos los trabajadores por separado

Código:
SELECT nombre, SEC_TO_TIME( SUM( TIME_TO_SEC( TotalHoras ) ) ) 
FROM  `v_todo` 
GROUP BY nombre
Dando como resultado

nombre total
14347149 713:43:20
27418783 356:19:30
44611685 241:15:00
Jissel Siniscalchi 838:59:59
Maria Saret 838:59:59
Natalia Gardiol 637:24:00

Al parecer da bien, eliminare registros y pondre algunas horas para que la suma de exacta y saber si funciona bien

Saludos

Última edición por MatiasFiermarin; 21/06/2014 a las 21:25

Etiquetas: modificar, registro, select, tabla
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 18:02.