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 entre deux tables


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    stage
    Inscrit en
    Juillet 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : stage

    Informations forums :
    Inscription : Juillet 2019
    Messages : 37
    Points : 28
    Points
    28
    Par défaut Jointure entre deux tables
    Bonjour,
    J'ai deux tables. Une table personnes et une table centres
    Dans la table centres je veux faire apparaitre une image en fonction de l'id de la personne.
    Je dois faire une requete innerjoin il me semble, besoin d'un peu d'aide. Merci d'avance !

    EDIT : J'ai essayé de faire quelque chose comme ça sans succes :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT personnes.entry_id
            FROM personnes 
            INNER JOIN centres
            ON centres.logo =  personnes.entry_id
            WHERE centres.id = '4' AND personnes.entry_id='23618'

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ON centres.logo =  personnes.entry_id

    1- Tu penses vraiment que la colonne "logo" est le "entry_id" ?
    J"en doute...

    2- Sans voir la structure de tes tables (et leur relation), on ne peut rien dire de plus.
    Dernière modification par rawsrc ; 04/09/2019 à 10h51.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    stage
    Inscrit en
    Juillet 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : stage

    Informations forums :
    Inscription : Juillet 2019
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     SELECT personnes.entry_id , centres.logo 
            FROM personnes P, centres C
            INNER JOIN centres
            ON C.prix =  C.logo
            AND P.genre_personne = P.entry_id
            WHERE C.id = '4' AND P.entry_id='23618'

    J'ai essayé quelque chose comme ça mais problemes de syntax...
    Concernant la structure des tables, dans personnes ont a toutes les informations relatives a la personne , et dans centres toutes les infos relatives aux centres...

  4. #4
    Invité
    Invité(e)
    Par défaut
    C'est n'importe quoi.

    Réponds à ma demande.

    Citation Envoyé par JeremyPatraque Voir le message
    ...Concernant la structure des tables, dans personnes ont a toutes les informations relatives a la personne , et dans centres toutes les infos relatives aux centres...

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    stage
    Inscrit en
    Juillet 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : stage

    Informations forums :
    Inscription : Juillet 2019
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    personnes :
    • entry_id
    • genre_personne
    • nom_personne
    • prenom_personne
    • age_personne
    • telephone_personne
    • email_personne
    • adresse_personne
    • ville_personne
    • pays_personne
    • codep_personne
    • centre_emetteur
    • centre_emetteur_region
    • licence

    centres :
    • id
    • nom
    • email
    • pwd
    • tel
    • site_internet
    • codep
    • ville
    • adresse
    • pays
    • region
    • logo

  6. #6
    Invité
    Invité(e)
    Par défaut
    Comment relies-tu une ligne de la table centre à une ligne de la table personnes ?
    Il manque une table relationnelle, non ?

    Citation Envoyé par JeremyPatraque Voir le message
    ...Dans la table centres je veux faire apparaitre une image en fonction de l'id de la personne...
    C'est "personnes.centre_emetteur" qui correspond à "centres.nom" ?

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    stage
    Inscrit en
    Juillet 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : stage

    Informations forums :
    Inscription : Juillet 2019
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    C'est "personnes.centre_emetteur" qui correspond à "centres.nom" ?
    Exact !

  8. #8
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Il vaudrait mieux lier sur centre.id (tu fais quoi si tu as deux centres qui s’appellent pareil, mais dans deux régions différentes ?)
    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]

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    stage
    Inscrit en
    Juillet 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : stage

    Informations forums :
    Inscription : Juillet 2019
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Celira Voir le message
    Il vaudrait mieux lier sur centre.id (tu fais quoi si tu as deux centres qui s’appellent pareil, mais dans deux régions différentes ?)
    L'application sur laquelle je travail n'a qu'une trentaine de centres fixe, aucune ne porte le même nom.

    EDIT : Voici ce que j'ai réussi a faire
    Il ne me manque plus que le entry_id de la personne et c'est bon , je n'y arrive pas.

    Nom : Capture.PNG
Affichages : 173
Taille : 30,1 Ko

    PS : Ne pas faire attention a la colonne prix c'était juste un test.

  10. #10
    Nouveau membre du Club
    Femme Profil pro
    stage
    Inscrit en
    Juillet 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : stage

    Informations forums :
    Inscription : Juillet 2019
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    J'ai rajouté a la fin de ma requete AND personnes.entry_id='###' et c'est tout bon ! Merci de votre aide !

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par JeremyPatraque Voir le message
    L'application sur laquelle je travail n'a qu'une trentaine de centres fixe, aucune ne porte le même nom.
    Ce n'est pas un bon argument.

    Il faut se servir des id (index AUTO-INCREMENTE).
    Car ils sont forcément UNIQUES.

  12. #12
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Basiquement, à moins qu'il n'y ait une clé d'unicité sur la colonne, tu ne devrais pas t'en servir de clé étrangère. Même si dans ton cas particulier, "ça ne risque pas de se produire", on est jamais à l'abri de l'ajout d'une donnée.

    J'ai une fois travaillé sur un écran où le client avait dit quelque chose du genre "on ne devrait pas pas avoir plus de 20 lignes, 50 grand maximum" et où on s'est retrouvé 2 ans plus tard à refaire complètement l'écran qui tombait en time-out car il essayait de traiter 7000 lignes au lieu des "50 grand maximum".
    Application directe de la loi de Murphy : "si ça peut foirer, ça foirera".
    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]

  13. #13
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Points : 433
    Points
    433
    Par défaut Normaliser les tables
    Tes noms de villes, regions et pays se retrouvent plusieurs fois dans tes tables.
    Tes jointures ne se font pas sur des champs appropriés.
    Comment mettre à jour une table de 10000 personnes, si les noms de villes sont mal saisis ?
    Comment mettre à jour la table personnes si un centre change de ville ?
    Une personne peut-elle être associée à plus d'un centre ?

    --
    Il faut bien normaliser tes tables pour avoir une base de données cohérente.
    Au moins normaliser à la forme 1FN et 2FN t'évitera des maux de tête.

    Voici une suggestion
    -- pays_id : code iso du pays à 3 chiffres, https://fr.wikipedia.org/wiki/ISO_3166-1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
     
    DROP TABLE IF EXISTS personnes;
    DROP TABLE IF EXISTS centres;
    DROP TABLE IF EXISTS villes;
    DROP TABLE IF EXISTS pays;
     
    CREATE TABLE pays (
    	pays_id smallint,
    	pays_nom varchar(100),
    	PRIMARY KEY (pays_id)
    ) ENGINE=INNODB;
     
    CREATE TABLE villes (
    	ville_id smallint NOT NULL AUTO_INCREMENT,
    	ville_nom varchar(100),
    	ville_region varchar(100),
    	PRIMARY KEY (ville_id)
    ) ENGINE=INNODB;
     
    CREATE TABLE centres (
    	centre_id smallint NOT NULL AUTO_INCREMENT,
    	pays_id smallint,
    	ville_id smallint,
    	centre_nom varchar(100),	
    	centre_email varchar(100),
    	centre_telephone varchar(50),
    	pwd varchar(40),
    	logo varchar(256),
    	codep varchar(100),
    	adresse varchar(100),
    	site_internet varchar(256),
     
    	PRIMARY KEY (centre_id),
    	FOREIGN KEY (ville_id) REFERENCES villes(ville_id),
    	FOREIGN KEY (pays_id) REFERENCES pays(pays_id)
     
    ) ENGINE=INNODB;
     
    CREATE TABLE personnes ( 
    	personne_id smallint NOT NULL AUTO_INCREMENT,
    	centre_id smallint,
    	ville_id smallint,
    	pays_id smallint,
    	age smallint,
    	genre char(1),
    	nom varchar(100),
    	prenom varchar(100),
    	email varchar(100),
    	adresse varchar(100),
    	codep_personne varchar(100),
    	licence varchar(100),
    	telephone varchar(100),
     
    	PRIMARY KEY (personne_id),
    	FOREIGN KEY (centre_id) REFERENCES centres(centre_id),
    	FOREIGN KEY (ville_id) REFERENCES villes(ville_id),
    	FOREIGN KEY (pays_id) REFERENCES pays(pays_id)
     
    ) ENGINE=INNODB;


    -- Quelques requêtes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT p.personne_id, p.nom, c.centre_nom, c.logo
    FROM personnes p
    INNER JOIN centres c ON c.centre_id = p.centre_id
    WHERE p.personne_id = 23618;
     
    --
    SELECT p.personne_id, p.nom, c.centre_nom, c.logo
    FROM personnes p
    INNER JOIN centres c ON c.centre_id = p.centre_id
    WHERE c.centre_id = 4;

  14. #14
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Citation Envoyé par jreaux62 Voir le message
    Ce n'est pas un bon argument.

    Il faut se servir des id (index AUTO-INCREMENTE).
    Car ils sont forcément UNIQUES.
    Dans l'absolu, pas forcément : sur une base MyISAM, l'auto-incrément peut être multiple s'il concerne une nième colonne d'un index
    cf. https://dev.mysql.com/doc/refman/8.0...increment.html

    La garantie d'unicité s'obtient par la contrainte UNIQUE (ou PK qui est forcément unique )


    Citation Envoyé par manzeki Voir le message
    Tes noms de villes, regions et pays se retrouvent plusieurs fois dans tes tables.
    Tes jointures ne se font pas sur des champs appropriés.
    Comment mettre à jour une table de 10000 personnes, si les noms de villes sont mal saisis ?
    Comment mettre à jour la table personnes si un centre change de ville ?
    Une personne peut-elle être associée à plus d'un centre ?

    Il faut bien normaliser tes tables pour avoir une base de données cohérente.
    Au moins normaliser à la forme 1FN et 2FN t'évitera des maux de tête.
    D'accord, mais il n'y a aucune raison de s'arrêter à la 2e forme normale
    De plus, il faut également appliquer le principe de non redondance aux régions : il faut donc créer une table des régions et créer une colonne FK dans la table des villes qui fait référence à l'identifiant de région de la table des régions

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

Discussions similaires

  1. Jointure entre deux tables ?
    Par spirit69 dans le forum Access
    Réponses: 2
    Dernier message: 05/12/2006, 20h21
  2. jointure entre deux tables mysql
    Par Invité dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 23/04/2006, 20h08
  3. [MySQL] Jointure entre deux tables
    Par Flushovsky dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 03/10/2005, 18h55
  4. PROBLEME DE JOINTURE ENTRE DEUX TABLE
    Par DarkMax dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/01/2005, 15h11
  5. Jointure entre deux tables et résultat
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 14h50

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