MySQL additionner les heures de prestations

ViPHP
ViPHP | 2291 Messages

07 juil. 2009, 23:24

Salut,



Si un jour il vous prend l'envie d'additionner les heures de travail d'un membre de votre équipe je vous
propose cette manière de faire : vous trouverez la table que j'ai créée pour le test et un exemple de données pour vos tests.

:arrow: La TABLE utiliser pour le test :
CREATE TABLE IF NOT EXISTS `totalheure` (
	  `id` int(11) NOT NULL AUTO_INCREMENT,
	  `debutjournee` datetime NOT NULL,
	  `finjournee` datetime NOT NULL,
	  `nom` varchar(20) NOT NULL,
	  PRIMARY KEY (`id`)
	) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
:arrow: Les données pour le test :
INSERT INTO totalheure (debutjournee, finjournee)
			VALUES
				('2009-06-15 8:25', '2009-06-16 01:47', 'Dunbar'),
				('2009-06-16 8:24', '2009-06-16 19:40', 'Dunbar'),
				('2009-06-17 8:37', '2009-06-17 14:07', 'Dunbar'),
				('2009-06-18 8:25', '2009-06-18 18:50', 'Dunbar'),
				('2009-06-19 8:20', '2009-06-19 22:00', 'Dunbar')
:arrow: La description des fonctions utiliser :
//////////////////////////////////////////////////////////////////////////////////////////////// 
//-->Pour avoir des résultats correct l'exemple utilise la fonction.--------------------------// 
//-->DOC Officiel http://dev.mysql.com/doc/refman/5.0/fr/date-and-time-functions.html.--------// 
// 1- TIME_TO_SEC Conversion en secondes.--------------------------------------------------// 
// 2- SUM Additionne les secondes .----------------------------------------------------------// 
// 3- SEC_TO_TIME convertit en heures, minutes et secondes au format 'HH:MM:SS' ou HHMMSS.---// 
// 4- TIMEDIFF() retourne la durée entre l'heure de début et l'heure de fin------------------// 
//////////////////////////////////////////////////////////////////////////////////////////////// 
:arrow: Et pour finir la requête :
$sql = "SELECT nom, SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(finjournee, debutjournee)))) AS total_heures FROM totalheure";
		$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

        while($assoc = mysql_fetch_assoc($req)){
        	
        	//-->Création d'un tableau qui va permettre de séparer les heures, minutes et secondes.--//
        	$heure = explode(':',$assoc['total_heures']);
            $h = $heure[0];
            $m = $heure[1];
            $s = $heure[2];

            //-->Ajout d'un s à heure dans le cas où il y en aurait plus d'une.--//
            $pl = ( $h > 1 ) ? 's' : '';
            $phrase = ( $h > 1 ) ? 'Le total des heures de la semaine pour ' : 'Le total d\'heure de la semaine pour ';

        echo $phrase .' <b>' . $assoc['nom'] . '</b> est de <b>' .$h.' Heure'.$pl.' '.$m.' Minutes '.$s.' Secondes.</b>';
        //-->Affiche Le total des heures de la semaine pour Dunbar est de 58 Heures 13 Minutes 00 Secondes.
        }
:wink:
Modifié en dernier par dunbar le 05 août 2009, 22:39, modifié 7 fois.
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

08 juil. 2009, 08:43

Le total des heures de la semaine pour Dunbar est de 58 Heure 13 Minutes 00 Secondes.
Frimeur ! :lol:

ViPHP
ViPHP | 2291 Messages

08 juil. 2009, 16:42

Jaloux :-*
$$$$$$$$$
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.