Nueva pregunta

Pregunta:

Fecha: 08-02-2018 00:30:46 (En Español)

Tabla de tiempos acumulados en segundos con PHP: no me funciona el código[No resuelta]

la tabla debe llevar una columna con los valores acumulados y debe ser calculada con php y mysql, no sólo mysql.
el db lo tengo en http://sqlfiddle.com/#!9/d484ec/2

CREATE TABLE `tbl_empleados` (
  `id` int(11) NOT NULL,
  `per_nr` varchar(11) NOT NULL,
  `name` varchar(50) NOT NULL,
  `sollzeit` time NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `begintime` datetime NOT NULL,
  `endtime` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Daten für Tabelle `tbl_empleados`
--

INSERT INTO `tbl_empleados` (`id`, `per_nr`, `name`, `sollzeit`, `created`, `begintime`, `endtime`) VALUES
(1, '120', 'Perez', '07:45:00', '2018-02-07 10:10:40', '2018-02-07 08:00:00', '2018-02-07 10:00:00'),
(2, '120', 'Perez', '07:45:00', '2018-02-07 10:10:40', '2018-02-07 11:00:00', '2018-02-07 13:00:00'),
(3, '120', 'Perez', '07:45:00', '2018-02-07 10:10:40', '2018-02-07 13:30:00', '2018-02-07 17:00:00'),
(4, '121', 'Gonzalez', '07:45:00', '2018-02-07 10:10:40', '2018-02-07 08:00:00', '2018-02-07 17:00:00'),
(5, '122', 'Martinez', '07:45:00', '2018-02-07 10:10:40', '2018-02-07 08:00:00', '2018-02-07 17:00:00'),
(6, '123', 'Garrido', '07:45:00', '2018-02-07 10:10:40', '2018-02-07 08:00:00', '2018-02-07 17:00:00'),
(7, '124', 'Villaruel', '07:45:00', '2018-02-07 10:11:42', '2018-02-07 09:00:00', '2018-02-07 17:00:00');


SELECT * ,(UNIX_TIMESTAMP(endtime)-UNIX_TIMESTAMP(begintime)) as diferencia
FROM tbl_empleados 
WHERE  per_nr='120' and 				
begintime >='2018-02-07 00:00:00' and endtime <='2018-02-20 23:59:59'
ORDER BY id asc, begintime asc



y el código php,(que funciona pero mal...) es:
<html>
	<body>
		<div>			
	<?php 
	
	$saldo=0; $saldo_cum=0;
	$pn='120';//personal nr
	$start_date='2018-02-07';
	$end_date='2018-02-20';	

	
	$conn = mysqli_connect("localhost", "root", " ", "testing");
	$sql = "SELECT * ,(UNIX_TIMESTAMP(endtime)-UNIX_TIMESTAMP(begintime)) as cum ".
			"FROM tbl_empleados ".
			"WHERE  per_nr=$pn and ".					
					"begintime >='".$start_date." 00:00:00' and endtime <='".$end_date." 23:59:59' ".
			"ORDER BY id asc, begintime asc";	

	 $por_fecha = $conn->query($sql);		
     
				echo "<table border=\"1\"> <tr>";
				echo "<th> i</th>";
				echo "<th> id</th>";
				echo "<th> per nr</th>";
				echo "<th>name </th>";
				echo "<th>ii </th>";
				echo "<th>begintime</th>";
				echo "<th>endtime</th>";
				echo "<th>saldo netto </th>";
				echo "<th>saldo cum </th>";
				echo "</tr>";		
		
		$i=0;
        while($row = $por_fecha->fetch_assoc()){	
		
				echo "<tr>";			
			  /* datum aufteilen */
				$string=utf8_encode ($row['begintime']);
				$teile = explode(' ',$string); 
				$fecha=$teile[0];//Jahr
				$hora=$teile[1];//Uhrzeit
	
			
			$fx= $row['begintime'];
				echo " <td>" .$i . "</td>";
				echo " <td>" .$row['id'] . "</td>";		
				echo " <td>" .$row['per_nr'] . "</td>";			
				echo " <td>" .$row['name'] . "</td>";	
			//busco las horas por dia
			
			$sql2 = "SELECT *,(UNIX_TIMESTAMP(endtime)-UNIX_TIMESTAMP(begintime)) as kum  FROM tbl_empleados 
				 WHERE begintime='$fx' AND per_nr='$pn' ";		
			 $horas = $conn->query($sql2);
			
			
          if( $horas->num_rows > 0 ){   
		  
                $saldo=0; $saldo_cum=0;
				$ii=0;
									
                while($v = $horas->fetch_assoc()){	
						
					$ii=$ii+1;	
						echo " <td>" .$ii . "</td>";
						echo " <td>" .$v['begintime'] . "</td>";
						echo " <td>" .$v['endtime'] . "</td>";
						echo " <td>" .$v['kum'] . "</td>";	
						$saldo     = $v['kum'];
						$saldo_cum = $saldo_cum + $saldo;	
						
					
					}
			$saldo     = $row['cum'];
			$saldo_cum = $saldo_cum + $saldo;	
			
			echo " <td>" .$saldo_cum . "</td>";	
			
			echo "</tr>";	
			
						
		}	
		
			$i=$i+1;
}		
		?>
		<tr>
		<td colspan="7"> Total  </td>
		<td> <?php echo $saldo; ?></td>
		<td> <?php echo $saldo_cum; ?></td>
		</tr>
		</table>
		
		</div>
	<body>
	</html>


La pregunta es: qué hago mal en la cuenta de acumular los segundos ? Las diferencias las hice dos veces porque ya no sabía dónde era correcto hacerla, pese a la redundancia obvia...

Les estaría agradecida por su ayuda

atte. Ulloa
Etiquetas: Base de Datos - HTML - MySQL - PHP - Pregunta - SQL Votos: 1 - Respuestas: 2 - Vistas: 13 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 08-02-2018 07:08:42 No entedim muy bien lo que requieres, pero si lo que deseas es saber la diferencia en segundos entre la hora de inicio y la hora final, asi como el total de segundos de dicho reriodo, podrias intentar algo asi:

    SELECT 
    DATE_FORMAT(begintime, '%H:%I:%S' ) as inicio, 
    DATE_FORMAT(endtime, '%H:%I:%S' ) as final, 
    (TIME_TO_SEC(DATE_FORMAT(begintime, '%H:%I:%S' )) + TIME_TO_SEC(DATE_FORMAT(endtime, '%H:%I:%S' ))) as totalSegundos, 
    TIME_TO_SEC(TIMEDIFF(DATE_FORMAT(endtime, '%H:%I:%S' ), DATE_FORMAT(begintime, '%H:%I:%S' )) ) as diferenciaSegundos
    FROM tbl_empleados 
    


    Tienes una muestra con tus mismos registros aqui:

    MUESTRA
      Votos: 2 - Link respuesta
     
  • Fecha: 08-02-2018 09:06:12 Hola Carlos, miles de gracias, eso exactamente quería tener. Lo único que tuve que cambiar era en el formato '%H:%I:%S' por '%H:%i:%s' para que no me agregara minutos demás...
    Ahora lo único que me falta es saber si es posible diferenciar las líneas por fecha, es decir, esto para poder hacer cuentas intermedias y quitarles por día una sola vez los 30 minutos de pausa. No sé si se podra hacer algún if en el mysql mismo. Pongo la tabla donde se ve el asunto al que me refiero. Muchas gracias de antemano


      Votos: 1 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com