IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Addition de 2 TIMEDIFF


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Juillet 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Addition de 2 TIMEDIFF
    Bonjour,

    Je voudrais avoir un coup de main concernant un petit soucis de retranscription.

    J'ai une requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req1 = "SELECT TIMEDIFF(arrive,depart_dejeuner) + TIMEDIFF(retour_dejeuner,sortie) AS diff FROM pointage WHERE nom='DELAFOSSE'";
    Qui me retourne le bon résultat mais sous forme : 42200.000000 au lieu de 04:22:00 pour 4h22.

    Alors que si je fais un echo de chacune des valeurs seul, il me retourne bien un résultat sous la forme 00:00:00, j'en déduis que c'est l'addition qui chamboule tout.

    Comment pourrais-je faire pour convertir ce résultat ?

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    Qui me retourne le bon résultat mais sous forme : 42200.000000 au lieu de 04:22:00 pour 4h22.
    Je pense qu'il faut réaliser un cast avec TIME pour obtenir le résultat recherché.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CAST(TIMEDIFF(arrive,depart_dejeuner) + TIMEDIFF(retour_dejeuner,sortie) AS TIME) AS diff 
    FROM pointage 
    WHERE nom='DELAFOSSE'
    Bon courage

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Juillet 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Ça marche impeccable, je vais de ce pas me renseigner sur la fonction CAST.

    Ps: saurais tu me dire comment retirer les secondes, j'ai tenté avec le FLOAT mais ça me retire les minutes aussi. Je voudrais afficher les heure et les minutes.

    Merci à toi.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour @refsecu

    Je ne suis pas un spécialiste de MySQL que je n'utilise pas, mais il me semble qu'il faut remplacer TIME par TIME_FORMAT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TIME_FORMAT(TIMEDIFF(arrive,depart_dejeuner) + TIMEDIFF(retour_dejeuner,sortie), '%H %i') AS diff 
    FROM pointage 
    WHERE nom='DELAFOSSE'
    A parfaire pour les paramètres, mais l'idée est celle-ci

    A plus

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Juillet 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    C'est superbe, simple précis et fonctionnel ! Merci beaucoup !

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Juillet 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Si tu le permets je vais t'embêter une dernière fois.

    Comme tu l'as compris c'est un système de pointage que je met en place.

    Je souhaiterais bloquer une entrée si elle a lieu dans les 15 minutes qui suit la dernière entrée, saurais-tu de quelle manière je peux m'y prendre ?

    Pour plus de clarté, voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <?php
    									try{
    								$db = new PDO('mysql:host=localhost;dbname=personnel','login','pwd');
    								$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    								}
    								catch(PDOException $e){
    								echo 'Erreur SQL';
    								}
    								$req = $db->prepare("SELECT * FROM pointage WHERE id='".$_POST['id']."' AND jour='".$_POST['jour']."'");
    								//On recupère les pseudo de t'as base ou les pseudo son egal au pseudo passer par le formulaire
    								$req->bindValue('id', $_POST['id'], PDO::PARAM_STR);
    								$req->bindValue('jour', $_POST['jour'], PDO::PARAM_STR);
    								$req->execute();
    								//on exécute la requête
     
    								$pseudoINbdd = $req->rowCount();
    								//Rowcount permet de sortir le nombre de valeur que t'as requête renvoi, que l'on rentre dans la variable pseudoINbdd (ou autre )
     
    								if($_POST['id']){
    								//Si la requête renvoi 0, le pseudo n'existe pas dans la base, sinon le pseudo existe.
    									if($pseudoINbdd == 0){
    										  $arrive = "INSERT INTO pointage (arrive, jour, semaine, id, nom, prenom, service) SELECT '".$_POST['heure']."', '".$_POST['jour']."',WEEK('".$_POST['jour']."'), id, nom, prenom, service FROM salaries WHERE id='".$_POST['id']."'";
    										  $controle = $arrive;
    										  $controle = $db->query($controle);
    										  echo "<div class=\"validation\">Votre arrivee à bien été enregistré</div>";
    									   }
    									else if($d=$req->fetch()){
     
    										if((($d['depart_dejeuner'])=='00:00:00')&&(($d['retour_dejeuner'])=='00:00:00')&&(($d['sortie'])=='00:00:00')){
    										$depart_dejeuner = "UPDATE pointage SET depart_dejeuner='".$_POST['heure']."' WHERE id='".$_POST['id']."' AND jour='".$_POST['jour']."'";
    										$controle = $depart_dejeuner;
    										$controle = $db->query($controle);
    									echo "<div class=\"validation\">Votre départ pour le déjeuner à bien été enregistré</div>";
    									   }
    									else if((($d['retour_dejeuner'])=='00:00:00')&&(($d['sortie'])=='00:00:00')){
    										$retour_dejeuner = "UPDATE pointage SET retour_dejeuner='".$_POST['heure']."' WHERE id='".$_POST['id']."' AND jour='".$_POST['jour']."'";
    										$controle = $retour_dejeuner;
    										$controle = $db->query($controle);
    									echo "<div class=\"validation\">Votre retour de déjeuner à bien été enregistré</div>";
    									   } 
    									else if(($d['sortie'])=='00:00:00'){
    										$sortie = "UPDATE pointage SET sortie='".$_POST['heure']."' WHERE id='".$_POST['id']."' AND jour='".$_POST['jour']."'";
    										$controle = $sortie;
    										$controle = $db->query($controle);
    										echo "<div class=\"validation\">Votre sortie à bien été enregistré</div>";
    										}
    									else echo  "<div class=\"erreur\">Tous vos pointages sont déjà enregistrés pour la journée</div>";
    								}
    							}
    							 ?>

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    Je ne suis pas compétent dans le langage PHP, il m'est impossible de t'aider sur ce point.

    Cependant, lors de l'arrivée d'une nouvelle entrée, il convient d'effectuer un test pour s'assurer que l'entrée précédente est réaliser depuis 15 minutes. Il faut :

    • Lors d'une entrée garder la date et l'heure de l'entrée ;
    • Mettre en place une routine qui teste toutes les entrées nouvelles ;
    • Comparer la date et l'heure de la nouvelle entrée avec celle conserver lors de la précédente entrée ;
    • Si moins quinze minutes, la nouvelle entrée est rejetée ;
    • Si plus de quinze minutes, la nouvelle entrée est acceptée ;
    • Ne pas oublier de mettre à jour la date et l'heure de référence.


    Il suffit de coder ce descriptif pour répondre à ta demande, sous réserve d'avoir bien compris ta problématique.

    Bon courage

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Juillet 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Oka, je vais réfléchir, Merci

Discussions similaires

  1. addition de champs
    Par k_boy dans le forum Bases de données
    Réponses: 7
    Dernier message: 16/06/2004, 08h56
  2. Addition de dates
    Par shingo dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 19/01/2004, 14h53
  3. Addition et multiplications
    Par Yayel dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 04/04/2003, 23h15
  4. [VB6] Problème d'addition de dates et de nombres
    Par pepper dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 28/11/2002, 21h12
  5. [imprecis]Réaliser a^n avec seulement l'opérateur d'addition
    Par Amon dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 08/11/2002, 22h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo