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 :

Requête sélection de messages (messagerie interne)


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Requête sélection de messages (messagerie interne)
    Bonjour,

    Je vous explique rapidement la structure de ma base:

    Une table Utilisateur => idu, login, mdp,... et une table Messages => id, id_exped, id_recep, contenu, date_message

    Je souhaite faire apparaitre la liste des derniers messages reçus ou envoyés pour l'utilisateur "Alpha"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT login, MAX(date_message), contenu, id_exped, id_recep FROM utilisateurs
    INNER JOIN messages
    ON idu != "id_Alpha" AND (idu = id_exped OR idu = id_recep)
    WHERE id_exped = "id_Alpha" OR id_recep = "id_Alpha"
    GROUP BY login
    Cela m'affiche bien le login de la personne Beta et non le miens, puisque je spécifie

    Je groupes les messages par login et par date grâce au GROUP BY et à

    Mais il y a toujours un problème au niveau de la jointure il me semble, le dernier message envoyé ne correspond pas (ce qui fait que je me retrouve avec le premier message alors que je voudrais afficher le dernier)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND (idu = id_exped OR idu = id_recep)
    Je pense qu'il faudrait spécifier le cas 1 avec une condition puis l'autre cas (le cas 2), peut être 2 jointures distinctes ou un EXISTS... mais je ne sais pas comment faire cela, les sous requêtes que j'essaye ne fonctionnent pas :/

    Je vous serais très reconnaissant pour toute info la dessus ! Merci à vous

  2. #2
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonsoir

    Je peux me tromper, mais au niveau de la conception, quelque chose me chiffone.

    J'aurai tendance à faire une table 'tMessage' (id, p, contenu, date_message); et une table "tMessage_Intervenant" (Id, refIDMessage, TypInterv, IDInterv).

    Avec les jointures appropriées, je pense que vous devriez pouvoir parvenir à vos fins.

    Pierre

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Le problème vient surtout du fait que votre requête est fausse : vous faites un GROUP BY login, mais vous n'appliquez pas de fonction d’agrégat sur les colonnes contenu, id_exped, id_recep qui ne sont pas en dépendance fonctionnelle de login.

    Dans ce cas, MySQL vous sort "les premières données qu'il trouve" pour ces trois colonnes.

    vous pouvez supprimer le GROUP BY et utiliser une clause NOT EXISTS pour vérifier qu'il n'existe pas de message plus récent.... vous obtiendrez ainsi le dernier message.

    Vous trouverez par ailleurs sur ce forum de nombreux exemples de cas similaires.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    OK, merci Mais je ne vois pas ou mettre le NOT EXISTS et ni quoi mettre dedans...

Discussions similaires

  1. Relation user -> message dans service messagerie interne
    Par eluus dans le forum Ruby on Rails
    Réponses: 3
    Dernier message: 28/02/2012, 00h32
  2. Petit éditeur pour messagerie interne
    Par Attilius dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 11/07/2006, 17h31
  3. Requête sélection : recherche par nom
    Par leeloo77 dans le forum Access
    Réponses: 7
    Dernier message: 17/02/2006, 15h39
  4. messagerie interne
    Par Drudwyn dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 02/02/2006, 11h27
  5. Messagerie interne (SQL) + quotas
    Par hush dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 03/11/2005, 14h48

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