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 :

Tables jointes, avec enregistrements multiples


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 23
    Points : 28
    Points
    28
    Par défaut [résolu]Tables jointes, avec enregistrements multiples
    Bonjour tout le monde,

    Dans la réalisation d'un systeme de messagerie privée pour mon site j'ai crée deux tables (je simplifie dans l'exemple) :

    USER
    ID nom rank

    MESS
    No relatif message

    ID et No sont en auto increment et MESS.relatif corréspond au nom de l'user qui a recu le message.

    J'aimerais selectionner tous les USER dont le rank est 1, et les afficher en les ordrant par le plus grand ID des messages qu'ils ont recu.

    Exemple:

    USER
    1 jean 1
    2 pierre 2
    3 paul 1

    Messages:
    1 jean blah
    2 pierre blahb
    3 paul blahbl
    4 jean blahbla
    5 paul blahblah

    Je devrais obtenir:
    ID de l'user // nom de l'user // id du dernier message recu
    3 // Paul // 5
    1 // jean // 4

    Voila... je suppose qu'il faut faire une requete sur les 2 tables jointes, avec distinct, mais je n'y suis pas arrivé malgré pas mal d'essais :S

    J'espere avoir été assez clair et que vous allez pouvoir m'aider ^^'
    Alors je signe ici...
    sccccrchttttrrrchhhh

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Points : 502
    Points
    502
    Par défaut
    Essaye ca, avec toutes reserves...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT DISTINCT T1.ID, 
      T1.nom,
      T2.No
     
    FROM USER T1
       INNER JOIN MESS T2 ON T1.ID = T2.relatif
     
    WHERE T2.No = (SELECT MAX(No) FROM MESS WHERE relatif = T1.ID)
     
    ORDER BY T2.No

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 23
    Points : 28
    Points
    28
    Par défaut
    non apparemment il accepte pas un select dans la condition...

    moi j'etais parti sur

    SELECT DISTINCT * FROM USER,MESS
    WHERE
    '$rank' = USER.rank
    USER.ID = MESS.relatif

    Mais a ce moment la j'obtiens:
    ID de l'user // nom de l'user // id du dernier message recu
    1 // jean // 1
    1 // jean // 4
    3 // paul // 3
    5 // paul // 5

    (donc 1 enregistrement par message au lieu d'un par user)

    Bon je cherche encore et je suis en train de m'approcher du résultat voulu avec:

    select ID, nom, rank, max(no) as num
    from USER,MESS
    where USER.nom = MESS.relatif
    group by 1,2,3
    order by num desc

    Le problème est que le premier enregistrement de USER est associé avec le premier message qui lui correspond au lieu d'être associé au dernier... :S
    Alors je signe ici...
    sccccrchttttrrrchhhh

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Id, Nom, MAX(No)
    FROM myUSER, MESSAGES
    WHERE Nom = Relatif
    AND rank = 1
    GROUP BY Id, Nom
    Si ton moteur l'autorise utilise plutôt le INNER JOIN pour la jointure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Id, Nom, MAX(No)
    FROM myUSER INNER JOIN MESSAGES ON Nom = Relatif
    WHERE rank = 1
    GROUP BY Id, Nom
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

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

Discussions similaires

  1. [VxiR2] Lister toutes les tables jointes avec une table
    Par Geo55 dans le forum Designer
    Réponses: 3
    Dernier message: 16/06/2016, 20h44
  2. Réponses: 1
    Dernier message: 22/07/2013, 08h11
  3. Réponses: 5
    Dernier message: 19/04/2009, 17h06
  4. [SQL] Requête complexe avec appel multiple à la même table
    Par Julien Dufour dans le forum Langage SQL
    Réponses: 9
    Dernier message: 14/04/2005, 14h12
  5. HELP!Comment supprimer des enregistrements de tables jointes
    Par ROOTPARIS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/06/2004, 16h41

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