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

Requêtes MySQL Discussion :

jointure qui ne ramene qu'un element par ligne


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut jointure qui ne ramene qu'un element par ligne
    Bonjour

    J'ai une table des personne et une table des visites (refpersonne, date visite).
    Je pensais initialement utiliser un trigger pour tenir à jour la date de la dernière visite mais mon hébergeur (OVH) ne semble pas permettre l'activation des triggers.
    Du coup je me retrouve soit à devoir implémenter en PHP ce que je voudrais eviter soit à trouver comment écrire la requête qui me permet de récupérer la liste des personnes avec une colonne dernière visite.

    Je voudrais donc faire une requête sur la table personne avec un outer join sur les visites (il n'y a pas forcement de visite) et ne récupérer que la date de la dernière visite pour chaque utilisateur.

    Merci d'avance pour vos lumières.

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Pour avoir la dernière visite de chaque utilisateur tu peux surement faire quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT idPersonne, MAX(date) AS lastVisite
    FROM `date visite`
    GROUP BY idPersonne
    Ensuite, tu peux faire une jointure entre refPersonne et cette requête si tu souhaites des infos contenues dans refPersonne .

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    En fait mon probleme est encore plus compliqué car ma table visite comporte en fait 3 champs (refpersonne, refsalon, date) et j'ai besoin de récupérer le refsalon pour lequel la date est la plus grande pour faire une jointure finale sur la table des salons.

    Du coup, je vais traiter le problème autrement, je ne peux pas faire de trigger mais je peux faire des procédures stockées.
    Je vais donc faire une proc stock qui créé la visite et mets a jour la table personne avec le refsalon correspondant, du coup je n'aurais pas besoin de faire des jointures monstrueuses et j'aurais directement accès au dernier salon visité et la donnée sera toujours a jour.

    merci quand même

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    C'est pas si monstrueux que ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT refpersonne, refsalon, date
    FROM `date visite`
    INNER JOIN
    (
    	SELECT refpersonne, MAX(`date`) AS lastVisite
    	FROM `date visite`
    	GROUP BY refpersonne
    ) tmp 
    	ON tmp.refpersonne = `date visite`.refpersonne 
    	AND tmp.lastVisite =`date visite`.date

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    whaouw, je ne savais pas qu'on pouvait faire des requetes comme ca avec une pseudo table temporaire (j'ai bcp fait du SQL sous sybase).

    Bon, néanmoins, je dois ensuite faire une jointure avec la table des salons pour avoir le libellé du salon, la table des personnes, et j'ai deja d'autres jointures donc ca risque d'etre lourd.

    Mais merci quand meme j'ai appris quelque chose.

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

Discussions similaires

  1. comment récupere des element par le nom de la balise?
    Par MASSAKA dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/08/2005, 19h59
  2. Requete OR qui ne ramene rien
    Par Sapience dans le forum Langage SQL
    Réponses: 10
    Dernier message: 14/04/2005, 12h12
  3. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10
  4. Réponses: 4
    Dernier message: 16/04/2004, 16h31
  5. Réponses: 2
    Dernier message: 10/03/2004, 18h52

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