MySQL additionner les heures de prestations
Posté : 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.
La TABLE utiliser pour le test :
Les données pour le test :
La description des fonctions utiliser :
Et pour finir la requête :

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.
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 ;
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')
////////////////////////////////////////////////////////////////////////////////////////////////
//-->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------------------//
////////////////////////////////////////////////////////////////////////////////////////////////
$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.
}