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

PHP & Base de données Discussion :

Requete: récupérer la dernière valeur datetime de ce jour [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de morpheuss
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2013
    Messages : 61
    Par défaut Requete: récupérer la dernière valeur datetime de ce jour
    Bonjour,

    J'ai un soucis pour résoudre ma requete.
    Il y a deux tables, une table avec une liste de personne et une autre avec des pointages en datetime réalisé au jours le jours.
    Je souhaite récupéré le dernier pointage de ce jour, de chaque personne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT e.id, e.initiale, nom, prenom, e.type, p.datetimepointage
    				FROM employer as e
    				LEFT JOIN pointage as p ON e.initiale = p.initiale
    				WHERE e.type = 1 and
    				((DAY(datetimepointage)= '$jour' and
    				MONTH(datetimepointage)= '$mois' and
    				YEAR(datetimepointage)= '$annee'))
    				GROUP BY p.initiale
    				ORDER BY p.initiale, datetimepointage
    Le problème avec le résultat de ma requete c'est que j'ai le 1er pointage de la journée en cours mais pas le dernier car ORDER doit être après le GROUP donc je ne sais pas trier la colonne datetimepointage pour n'avoir que le dernier pointage.

    Autre problème, je souhaiterais voir toute les personne dans ma liste même celle qui n'ont pas pointé ce jour. Si une personne n'a pas encore pointé elle n'est pas présente dans le résultat de ma requete actuelle et je voudrais l'afficher.

    Donc pour résumé, je souhaite afficher la liste de toute les personnes avec un e.TYPE = 1 et voir à tous leurs derniers pointage 'datetimepointage' de ce jour.

    Comment faire dans ce cas ?

    D'avance merci ,

    Steph

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    En mettant un ordre décroissant sur la date peut-être ?
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY p.initiale, datetimepointage desc
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre confirmé Avatar de morpheuss
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2013
    Messages : 61
    Par défaut
    Citation Envoyé par Celira Voir le message
    En mettant un ordre décroissant sur la date peut-être ?
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY p.initiale, datetimepointage desc
    Non car il y a un GROUP BY avant, le tri par datetimepointage ne sert à rien dans ce cas.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 73
    Par défaut
    Citation Envoyé par morpheuss Voir le message
    Bonjour,

    J'ai un soucis pour résoudre ma requete.
    Il y a deux tables, une table avec une liste de personne et une autre avec des pointages en datetime réalisé au jours le jours.
    Je souhaite récupéré le dernier pointage de ce jour, de chaque personne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT e.id, e.initiale, nom, prenom, e.type, p.datetimepointage
    				FROM employer as e
    				LEFT JOIN pointage as p ON e.initiale = p.initiale
    				WHERE e.type = 1 and
    				((DAY(datetimepointage)= '$jour' and
    				MONTH(datetimepointage)= '$mois' and
    				YEAR(datetimepointage)= '$annee'))
    				GROUP BY p.initiale
    				ORDER BY p.initiale, datetimepointage
    Le problème avec le résultat de ma requete c'est que j'ai le 1er pointage de la journée en cours mais pas le dernier car ORDER doit être après le GROUP donc je ne sais pas trier la colonne datetimepointage pour n'avoir que le dernier pointage.
    Bonjour.
    Tu as pensé à utiliser la fonction MAX() ?
    Utilisée avec un GROUP BY, elle te permet de récupérer le MAX d'une colonne en fonction du groupe...
    Citation Envoyé par morpheuss Voir le message
    Autre problème, je souhaiterais voir toute les personne dans ma liste même celle qui n'ont pas pointé ce jour. Si une personne n'a pas encore pointé elle n'est pas présente dans le résultat de ma requete actuelle et je voudrais l'afficher.
    Et ça, c'est un boulot pour LEFT OUTER JOIN

  5. #5
    Membre confirmé Avatar de morpheuss
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2013
    Messages : 61
    Par défaut
    l'option MAX() ne me convenait pas non plus.

    J'ai résolut mon problème en réalisant une requète qui va me mettre préalablement les pointages de chaque personne pour ce jour dans un ARRAY



    Ma 2e requete prends toutes les personnes avec un TYPE = 1

    dans le WHILE je regarde dans l'array le dernier pointage de cette personne.

    Merci pour votre aide.

    Steph

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 73
    Par défaut
    15 minutes pour tester MAX et te rendre compte que ça ne convient pas, chapeau

    Par curiosité, en quoi ça ne convient pas ?

  7. #7
    Membre confirmé Avatar de morpheuss
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2013
    Messages : 61
    Par défaut
    Citation Envoyé par macgawel Voir le message
    15 minutes pour tester MAX et te rendre compte que ça ne convient pas, chapeau

    Par curiosité, en quoi ça ne convient pas ?
    Lorsque je mettais MAX(p.datetimepointage) je n'avais plus qu'une donnée. Uniquement le pointage de la dernière personne ayant pointé.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 73
    Par défaut
    Pour être précis, tu as le pointage max pour chaque p.initiale (je ne sais pas à quoi correspond ce champ...)

    C'est le principe du GROUP BY
    C'est bien pour ça que j'ai précisé récupérer le MAX d'une colonne en fonction du groupe...

    La démarche classique pour ce genre de requêtes, c'est :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT champ1, champ2, ...champN, AGREGAT(champ aggloméré) FROM MATABLE
    WHERE conditions
    GROUP BY champ1, champ2, ...champN

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/05/2010, 02h29
  2. Call symput : Récupérer la dernière valeur
    Par lilly74 dans le forum Macro
    Réponses: 4
    Dernier message: 19/10/2009, 22h11
  3. [Oracle] Récupérer la dernière valeur insérée
    Par billainfo dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 03/09/2007, 14h50
  4. Réponses: 7
    Dernier message: 06/03/2006, 12h19
  5. [Séquences] Pour récupérer la dernière valeur
    Par tnodev dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 24/05/2005, 11h35

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