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

PHP & Base de données Discussion :

[phpMyadmin/MySQL] Double liaison sur une table


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 42
    Par défaut [phpMyadmin/MySQL] Double liaison sur une table
    Bonjour,

    Avant toutes chose, je précise que la dernière fois que j'ai fait du SQL, c'était sur les bancs de l'université... Donc je suis persuadé que pour vous, la réponse sera simple, mais en dépit de efforts les plus francs pour trouver une solution, celle-ci m'échappe.

    Je m'explique :

    Je dispose de 3 tables :
    - Auteur (id (int), auteur(char), et police(int) )
    - Roman (id (int), auteur(int), titre(char) et police(int) )
    - Police (id (int), Nom(char))

    Un champs Roman.auteur est le numéro id d'un auteur
    Les champs Auteur.Police et Roman.Police sont les numéros id d'une police

    Et, en résultat de la requête, j'ai besoin de sortir chaque roman avec sa police, et l'auteur qui va avec et sa police.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query='SELECT * FROM Romans,auteur,Police WHERE Romans.auteur=auteur.id AND auteur.police=Police.Police_id AND Roman.police=Police_id';
    L'ennui, vous vous doutez bien, c'est que le champs "Nom_police" dans la table police se retrouve à la fois requis pour l'auteur et pour le roman...

    Y'a-t-il une solution pour changer les noms table police la seconde fois qu'elle est appellée ou dois-je me résigner à créer une 2e table Police (un comble...)

    Merci d'avance de vous être penché sur mon problème

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 988
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 988
    Par défaut
    Avant toute chose, il faut te fixer une manière cohérente de nommer tes tables et tes colonnes car ça devient vite illisible. Fait une recherche sur les conventions de nommage en SQL, tu verras que les avis divergent, mais l'essentiel c'est d'en choisir une et de s'y tenir. Sans devoir l'expliquer, on doit pouvoir immédiatement identifier un id, une clé étrangère et la table dont elle provient, et ne plus devoir se demander si elle s'écrit au pluriel, au singulier, en minuscule, majuscule, camel-case, snake case...

    Ensuite, je ne comprends pas ce que vient faire cette colonne police dans ta table Auteur (Est-ce qu'un auteur n'utilise qu'une police? Ou alors un auteur n'est il pas unique dans cette table?). Je te conseille de prendre un papier et un crayon pour recomposer ton schéma en te posant ce type de questions basiques. Le but du jeu est d'éviter la redondance de l'information, de désigner ce qui doit être unique, et d'établir clairement le type de relation entre chaque tables (one to many, many to many, many to one, one to one).

    Une fois que ce sera fait, tu pourras plus facilement effectuer tes jointures.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 42
    Par défaut
    Bonjour CosmoKnacki,

    Citation Envoyé par CosmoKnacki Voir le message
    Avant toute chose, il faut te fixer une manière cohérente de nommer tes tables et tes colonnes car ça devient vite illisible. Fait une recherche sur les conventions de nommage en SQL, tu verras que les avis divergent, mais l'essentiel c'est d'en choisir une et de s'y tenir. Sans devoir l'expliquer, on doit pouvoir immédiatement identifier un id, une clé étrangère et la table dont elle provient, et ne plus devoir se demander si elle s'écrit au pluriel, au singulier, en minuscule, majuscule, camel-case, snake case...
    Tu as un lien en particulier sur ces conventions ? Ca m'interesse, et je t'avoue que c'est la première fois que j'en entends parler. (D'un autre coté, ma base est une formation en mécanique, alors je peux comprendre que le cours n'ai pas évoqué ce point-là...(a moins que ce ne soit les filles en cours d'EPS à coté: on en avait pas beaucoup en classe))

    Toujours est-il que je pourrai me faire mieux comprendre ultérieurement et nettoyer mon code par la même occasion.


    Citation Envoyé par CosmoKnacki Voir le message
    Ensuite, je ne comprends pas ce que vient faire cette colonne police dans ta table Auteur (Est-ce qu'un auteur n'utilise qu'une police? Ou alors un auteur n'est il pas unique dans cette table?). Je te conseille de prendre un papier et un crayon pour recomposer ton schéma en te posant ce type de questions basiques. Le but du jeu est d'éviter la redondance de l'information, de désigner ce qui doit être unique, et d'établir clairement le type de relation entre chaque tables (one to many, many to many, many to one, one to one).

    Une fois que ce sera fait, tu pourras plus facilement effectuer tes jointures.
    J'ai déjà fait le schéma, je vais essayer de le poser un peu plus tard. Pour faire simple, un auteur utilise une police, et son roman en utilise une autre. Ces deux polices sont placées dans la table police. C'est là toute la problématique : lorsque j'appelle la police de l'auteur, c'est un champs Nom_police, et la police du roman est aussi le Nom_policeC'est pour cela que je cherche à tout intéger dans une seule requête

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 42
    Par défaut
    Re, Bon, je viens de trouver ce dont tu parlais par rapport aux conventions, je vais corriger le tir dés que je rentre ce soir.

    Concernant le schéma des tables, il est en PJ

    Nom : tables.png
Affichages : 294
Taille : 185,2 Ko

    Bon, je n'arrive pas à réduire l'image ni à la mettre sous forme d'un fichier.

  5. #5
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 988
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 988
    Par défaut
    Pour les conventions de nommage, je te conseille http://sqlpro.developpez.com/cours/standards/. Après rien ne t'empêche de jeter un œil aux autres tutoriels ou ailleurs pour voir ce qui se pratique.

    Ensuite pour se faire la main avec les jointures tu peux suivre http://sqlpro.developpez.com/cours/sqlaz/jointures/ qui fonctionne à partir de cette base de données d'exemple: http://sqlpro.developpez.com/cours/bddexemple/.

    D'une manière générale, les cours et tutoriels de la section SGBD du site sont d'une qualité exceptionnelle, n'hésite pas à les parcourir.

    Puisque tu travailles avec MySQL, tu peux télécharger gratuitement MySQLWorkbench bien plus maniable et pratique que PHPMyAdmin.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 42
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Pour les conventions de nommage, je te conseille http://sqlpro.developpez.com/cours/standards/. Après rien ne t'empêche de jeter un œil aux autres tutoriels ou ailleurs pour voir ce qui se pratique.

    Ensuite pour se faire la main avec les jointures tu peux suivre http://sqlpro.developpez.com/cours/sqlaz/jointures/ qui fonctionne à partir de cette base de données d'exemple: http://sqlpro.developpez.com/cours/bddexemple/.
    Je note, télécharge les pdf (pas de réseau là où je réside)

    Citation Envoyé par CosmoKnacki Voir le message
    Puisque tu travailles avec MySQL, tu peux télécharger gratuitement MySQLWorkbench bien plus maniable et pratique que PHPMyAdmin.
    Je viens de regarder sur le site :
    Mais j'ai l'impression que j'ai besoin de Microsoft .NET Framework et de Visual C++ Redistributable for Visual Studio 2013, étant sous linux, n'y a-t-il pas un soucis ? (même si le paquet .deb existe.) Quand à MySQL, je l'ai utilisé étudiant, et il était dans le package avec lampp.

Discussions similaires

  1. Double relation sur une table
    Par jasinskimathieu dans le forum MySQL
    Réponses: 2
    Dernier message: 10/08/2015, 14h08
  2. [WB19] Double clic sur une table
    Par mimi1255 dans le forum WebDev
    Réponses: 2
    Dernier message: 08/10/2014, 09h36
  3. Double requête sur une table
    Par sub-0 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/11/2010, 16h03
  4. Comment faire une double requête sur une table
    Par giova_fr dans le forum Langage SQL
    Réponses: 6
    Dernier message: 04/06/2010, 18h08
  5. [MySQL] Jointure sur une table déjà jointe
    Par genova dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/10/2005, 23h54

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