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 :

INNER JOIN avec integer et varchar


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Par défaut INNER JOIN avec integer et varchar
    Bonjour,

    Je débute, merci d'être indulgent.

    Voici ma requète qui fonctionne presque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT acteur.acteur_nom nom, message.*
    FROM wp_plateforme_message message
    INNER JOIN wp_plateforme_acteur acteur
    ON message.id_destinataires = acteur.id
    ORDER BY message.date_crea
    DESC
    Table acteur = id + nom + prénom + etc.
    Table message = id + id_destinataires + contenu + etc.

    acteur.id => integer, c'est l'id de l'acteur
    message.id_destinataires => varchar, une série de nombres séparés par des virgules : 12,44,52, etc.. Ce sont les id des acteurs. C'est peut-être ici que j'ai fait une erreur de conception ?

    Avec ma requête actuelle, nom = nom du premier acteur seulement. Exemple : Machin.
    Comment faire pour que nom = noms de tous les acteurs correspondants et pas seulement le premier ? Exemple : Machin, Truc, Bidule, etc.

    Je viens de m'apercevoir qu'il exsite unsous forum spécialisé pour les requêtes ! Désolé...

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    message.id_destinataires => varchar, une série de nombres séparés par des virgules : 12,44,52, etc.. Ce sont les id des acteurs. C'est peut-être ici que j'ai fait une erreur de conception ?
    Exactement !

    Règle de gestion :
    Un message est envoyé à un à plusieurs acteurs et un acteur peut être destinataire de plusieurs messages.

    MCD :
    message -1,n----envoyer----0,n- acteur

    Tables :
    message (id...)
    acteur (id...)
    message_envoyer_acteur (id_message, id_acteur_destinataire...)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Par défaut
    Merci de vous être intéressé à mon cas

    J'ai finalement compris que je ne devais pas enregistrer les id des destinataires sous forme d'une suite de chiffres dans une colonne de la table message.

    Mais je n'ai pas bien compris votre proposition.

    Ou est-ce que j'enregistre les id des destinataires (les acteurs) ?

    Je dois créer une nouvelle table ? Quelle serait sa structure ? Quelle relation aurait-elle avec les 2 autres (message et acteur) ?

    Merci de votre aide.

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Ou est-ce que j'enregistre les id des destinataires (les acteurs) ?

    Je dois créer une nouvelle table ? Quelle serait sa structure ? Quelle relation aurait-elle avec les 2 autres (message et acteur) ?
    Euh... c'est justement ce que j'ai décrit dans mon précédent message !

    En matière de base de données, la démarche consiste par commencer à définir les règles de gestion des données.
    Dans ton cas, si j'ai bien compris, il s'agit d'un acteur qui envoie un message à un ou plusieurs autres acteurs.
    J'en ai donc déduit la règle de gestion suivante :
    Citation Envoyé par CinéPhil
    Règle de gestion :
    Un message est envoyé à un à plusieurs acteurs et un acteur peut être destinataire de plusieurs messages.
    Comme je l'explique dans mon blog, de cette règle de gestion correctement exprimée, il découle naturellement le morceau de MCD (Modèle Conceptuel de Données, méthode Merise) suivant :
    Citation Envoyé par CinéPhil
    MCD :
    message -1,n----envoyer----0,n- acteur
    Et ce MCD entrainera la création des tables que j'ai décrites :
    Tables :
    message (id...)
    acteur (id...)
    message_envoyer_acteur (id_message, id_acteur_destinataire...)
    Chaque entité-type du MCD (acteur et message) entraîne la création d'une table dans la BDD.
    Et comme on a, dans le MCD, une association de type (1,n - 0,n) on crée aussi, comme je l'explique aussi dans mon blog) une table associative donc la clé primaire est composée des clés étrangères référençant les clés primaires des deux tables entrant en jeu dans l'association du MCD.

    Au final, si l'acteur 1 envoie un message aux acteurs 2 et 3, la table message_envoyer_acteur contiendra les données suivantes :
    id_message, id_acteur_destinataire
    1, 2
    1, 3

    C'est plus clair ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Par défaut
    Oui c'est super clair

    Merci pour ton aide, désolé d'avoir insisté mais je débute et je n'avais pas compris MCD

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Quand tu auras solutionné ton problème, n'oublie pas le petit clic sur !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Inner join avec condition
    Par fguigui dans le forum Langage SQL
    Réponses: 7
    Dernier message: 09/04/2012, 19h40
  2. Inner Join avec des NULL
    Par BLJ.CHAUVIN dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/07/2011, 11h28
  3. INNER JOIN avec un LIKE
    Par Spiritueux dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/10/2008, 17h14
  4. Réponses: 7
    Dernier message: 13/12/2007, 13h32
  5. INNER JOIN avec des données de sélection
    Par EK1_ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/05/2006, 18h40

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