MSSQL Problem
bilelwebdev
-
mjmdurand Messages postés 246 Date d'inscription Statut Membre Dernière intervention -
mjmdurand Messages postés 246 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voici le problème, je veux calculer la somme des heures travaillées par un employé / jour sachant qu'un employé utilise la pointeuse pour l'entrée/sortie, chaque fois qu'il pointe, le système insère dans la table correspondante: La date et l'heure de pointage dans un seul champ, l'action (Entrée/Sortie) et le nom de l'employé.
Je veux donc trouver le nombre des heures travaillées par un tel employé.
C'est uregent SVP.
Voici la table:
EMP Date_Record Action
---------------------------------------------------
Paul 2008-01-01 08:00:00 Entrée
Paul 2008-01-01 09:30:00 Sortie
Paul 2008-01-01 10:15:33 Entrée
Paul 2008-01-01 11:05:31 Sortie
Paul 2008-01-01 13:17:02 Entrée
Paul 2008-01-01 17:00:00 Sortie
Je veux calculer le nombre des heures travaillées par Paul le 01-01-2008
L'employé peut sortir lorsqu'il veut pendant la journée, le but donc de trouver le nombre des heures/jour travaillées par l'employé.
J'ai besoin de votre aide
Voici le problème, je veux calculer la somme des heures travaillées par un employé / jour sachant qu'un employé utilise la pointeuse pour l'entrée/sortie, chaque fois qu'il pointe, le système insère dans la table correspondante: La date et l'heure de pointage dans un seul champ, l'action (Entrée/Sortie) et le nom de l'employé.
Je veux donc trouver le nombre des heures travaillées par un tel employé.
C'est uregent SVP.
Voici la table:
EMP Date_Record Action
---------------------------------------------------
Paul 2008-01-01 08:00:00 Entrée
Paul 2008-01-01 09:30:00 Sortie
Paul 2008-01-01 10:15:33 Entrée
Paul 2008-01-01 11:05:31 Sortie
Paul 2008-01-01 13:17:02 Entrée
Paul 2008-01-01 17:00:00 Sortie
Je veux calculer le nombre des heures travaillées par Paul le 01-01-2008
L'employé peut sortir lorsqu'il veut pendant la journée, le but donc de trouver le nombre des heures/jour travaillées par l'employé.
J'ai besoin de votre aide
A voir également:
- MSSQL Problem
- DBConvert for Access & MSSQL - Télécharger - Gestion de données
24 réponses
Salut,
Perso, ce n'est peut-être pas la meilleure solution mais je stockerais tout ça dans un tableau et je bidouillerais avec des if()... et donc à grands coups de soustraction :)
Perso, ce n'est peut-être pas la meilleure solution mais je stockerais tout ça dans un tableau et je bidouillerais avec des if()... et donc à grands coups de soustraction :)
essaye de creer une table avec comme champs (minimum) id,nom,entrée,sortie,jour
a chaque sortie, on insert le timestamp actuel (avec time() )dans la colone sortie
a chaque entrée, on insert le timestamp actuel (avec time() )dans la colone entrée
a chaque action (entrée ou sortie) on insert le timestamp actuel (avec time() )dans la colone jour
apres, on va definir les dates de selection :
pour cela, on utilise mktime qui se parametre comme ceci :
mktime(heure,minute,seconde,mois,jour,annee)
$matin= mktime(0, 0, 0, 2, 15, 2008);
$soir= mktime(0, 0, 0, 2, 16, 2008);
apres, on fait notre requete sql
$retour='"SELECT *FROM "nom de table" WHERE jour BETWEEN '$matin' AND '$soir'");
puis, on va effectuer les calculs
while ($donnees=mysql_fetch_array($retour))
{
$entree=$entree+$donnees['entree'];
$sortie=$sortie+$donnees['sortie'];
}
$temps_travail=$sortie - $entree;
echo $donnees['nom'].' a travaillé '.date('H:i', $temps_travail);
voila
a chaque sortie, on insert le timestamp actuel (avec time() )dans la colone sortie
a chaque entrée, on insert le timestamp actuel (avec time() )dans la colone entrée
a chaque action (entrée ou sortie) on insert le timestamp actuel (avec time() )dans la colone jour
apres, on va definir les dates de selection :
pour cela, on utilise mktime qui se parametre comme ceci :
mktime(heure,minute,seconde,mois,jour,annee)
$matin= mktime(0, 0, 0, 2, 15, 2008);
$soir= mktime(0, 0, 0, 2, 16, 2008);
apres, on fait notre requete sql
$retour='"SELECT *FROM "nom de table" WHERE jour BETWEEN '$matin' AND '$soir'");
puis, on va effectuer les calculs
while ($donnees=mysql_fetch_array($retour))
{
$entree=$entree+$donnees['entree'];
$sortie=$sortie+$donnees['sortie'];
}
$temps_travail=$sortie - $entree;
echo $donnees['nom'].' a travaillé '.date('H:i', $temps_travail);
voila
tout d'abord, merci par votre réponse,
J'ai pensé à votre idée avant de déposer le problème sur le forum, tu sais pour quoi? car le DDL de la table est plus compliqué puisqu'elle est crée par un système automatique de pointage (on n'a pas l'accès à modifier la structure de la table), donc je cherche à trouver un solution en PHP/MSSQL pour résoudre ce problème,
j'attends votre réponse.
J'ai pensé à votre idée avant de déposer le problème sur le forum, tu sais pour quoi? car le DDL de la table est plus compliqué puisqu'elle est crée par un système automatique de pointage (on n'a pas l'accès à modifier la structure de la table), donc je cherche à trouver un solution en PHP/MSSQL pour résoudre ce problème,
j'attends votre réponse.
Moi je ferais, pour chaque enregistrement :
SI l'action est une sortie, tu prends la date de sortie et tu lui enlève la date d'entrée de l'enregistrement précédent
tu incrémentes ça à ton total et tu boucles
SI l'action est une sortie, tu prends la date de sortie et tu lui enlève la date d'entrée de l'enregistrement précédent
tu incrémentes ça à ton total et tu boucles
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
tu fais un getDate et tu récupére heures, minutes et secondes : https://www.php.net/manual/fr/function.getdate.php
le probleme de getdate, c'est qu'ici, on ne peut pas obtenir de timestamp vu que le format n'est pas le bon.
de plus, on obtiendrait les renseignement du timestamp actuel non ?
de plus, on obtiendrait les renseignement du timestamp actuel non ?
Non si on fournit le parametre getdate($date), ça retourne les infos de $date.
C'est vrai que c'est génant pour le format je n'avais pas fait gaffe....
'Faut trouver un moyen de la formater....Mais comment? :s
C'est vrai que c'est génant pour le format je n'avais pas fait gaffe....
'Faut trouver un moyen de la formater....Mais comment? :s
Ben dans ce cas, je penses que tu dois faire plusieurs explode et faire une suite de tests pour récupérer les bonnes infos et les formater... Non?
J'AI TROUVE !!!!!
format de base : YYYY-MM-JJ HH:MM:SS
format recherché : HH:MM:SS MM-JJ-YYYY
on ignore les 10 premiers caracteres
$debut=substr($date,10)
on obtient donc HH:MM:SS
$milieu=substr($date,-14,5 )
on obtient donc MM-JJ
$fin=substr($date,-19,4)
on obtient donc YYYY
$date=$debut.$milieu.'-'.$fin
format de base : YYYY-MM-JJ HH:MM:SS
format recherché : HH:MM:SS MM-JJ-YYYY
on ignore les 10 premiers caracteres
$debut=substr($date,10)
on obtient donc HH:MM:SS
$milieu=substr($date,-14,5 )
on obtient donc MM-JJ
$fin=substr($date,-19,4)
on obtient donc YYYY
$date=$debut.$milieu.'-'.$fin
je sais ! je m'en suis rendu compte apres avoir posté (car quand j'écrivais, je ne voyais pas les nouveaux messages)
IL DOIT Y AVOIR UNE SOLUTION
euhh... un crayon, du papier , une calculatrice, ca irait comme solution ?
IL DOIT Y AVOIR UNE SOLUTION
euhh... un crayon, du papier , une calculatrice, ca irait comme solution ?
voici comme je fais pour retourner les enregistrements de la table système:
function emp_sql_select()
{
global $conn, $_POST;
if(!isset($_SESSION['lname']) && !isset($_SESSION['fname'])){
$_SESSION['lname']=$_POST['lname'];
$_SESSION['fname']=$_POST['fname'];
}
$sql = "SELECT REC_DAT,DESCRP,LOCATION,LNAME,FNAME FROM EV_LOG WHERE day(REC_DAT) = day(GETDATE()) and month(rec_dat) = month(GETDATE()) and year(rec_dat)=year(getdate()) and upper(LNAME)=upper('" .
$_SESSION['lname'] . "') and upper(FNAME)=upper('" . $_SESSION['fname'] . "')";
$res = mssql_query($sql, $conn);
return $res;
}
on donne:$conn l'objet de connexion.
Donc on doit traiter ceci:
$res = emp_sql_select();
$row = mssql_fetch_assoc($res);
on doit alors traiter $row['REC_DAT'], comment faire alors pour résoudre le problème??
function emp_sql_select()
{
global $conn, $_POST;
if(!isset($_SESSION['lname']) && !isset($_SESSION['fname'])){
$_SESSION['lname']=$_POST['lname'];
$_SESSION['fname']=$_POST['fname'];
}
$sql = "SELECT REC_DAT,DESCRP,LOCATION,LNAME,FNAME FROM EV_LOG WHERE day(REC_DAT) = day(GETDATE()) and month(rec_dat) = month(GETDATE()) and year(rec_dat)=year(getdate()) and upper(LNAME)=upper('" .
$_SESSION['lname'] . "') and upper(FNAME)=upper('" . $_SESSION['fname'] . "')";
$res = mssql_query($sql, $conn);
return $res;
}
on donne:$conn l'objet de connexion.
Donc on doit traiter ceci:
$res = emp_sql_select();
$row = mssql_fetch_assoc($res);
on doit alors traiter $row['REC_DAT'], comment faire alors pour résoudre le problème??
Je ferais :
$tab1= explode(" ", $date);
$tab2 = explode(":", $tab[0]);
$date = $tab1[1]." ".$tab2[1]."-".$tab2[2]."-".$tab2[0];
$tab1= explode(" ", $date);
$tab2 = explode(":", $tab[0]);
$date = $tab1[1]." ".$tab2[1]."-".$tab2[2]."-".$tab2[0];
Merci vous deux, mes amis, demain je chercherais à trouver la solution en exploitant vos idées d'or.
avec tous mes respects.
avec tous mes respects.
Ouais ben je réitère ma proposition sauf qu'y faut faire des tests pour avoir le "AUG" et le "AM".... :s