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 :

Liaison entre plusieurs tables


Sujet :

PHP & Base de donn�es

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    22
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Par d�faut Liaison entre plusieurs tables
    Bonjour

    j'ai 4 tables dans ma base que je souhaite lier

    une table livre qui peut �tre lier soit � une table auteur, artiste ou auteur_pref

    la table livre contient
    id_livre
    art_id (pour faire le lien avec la table artistes)
    preface_id (pour faire le lien avec la table auteur_pref)
    aut_id (pour faire le lien avec la table auteurs

    l'identifiant de la table auteurs est id_aut
    l'identifiant de la table artistes est id_art
    l'identifiant de la table auteur_pref est id_pref

    Pour chaque livre de ma table "livre" je souhaite afficher soit l'auteur, soit l"auteur de la pr�face, soit l'artiste, soit seulement 2 de ces donn�es, soit les 3.

    Ma requ�te est la suivante :
    SELECT * FROM livre, artistes, auteurs, auteur_pref WHERE art_id=id_art XOR preface_id=.id_pref XOR aut_id=id_aut

    Dans Mysql cette requ�te affiche bien les lignes que je souhaite afficher.

    pour les afficher dans mon fichier php je fait :
    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
     
    $query_auteur = "SELECT * FROM livre,  artistes, auteurs, auteur_pref WHERE  livre.art_id=artistes.id_art XOR livre.preface_id=auteur_pref.id_pref XOR livre.aut_id=auteurs.id_aut";
    $auteur = mysql_query($query_auteur, $dbprotect) or die(mysql_error());
    $row_auteur = mysql_fetch_assoc($auteur); 
     
    do { 
    <i>Auteur</i> :<a href="fiche_auteur.php?fiche_aut=<?php echo  $row_auteur['id_aut']; ?>"> <?php echo  $row_auteur['nom']; ?>  </a> <br/>
    	        <i>Préface</i> : <?php echo  $row_auteur['nom_pref']; ?>  <br/>
    	        <i>artiste</i> : <?php echo  $row_auteur['nom_art']; ?>  <br/>
     
    } while ($row_auteur = mysql_fetch_assoc($auteur));
     		$rows = mysql_num_rows($auteur);
      		if($rows > 0) {
          		mysql_data_seek($auteur, 0);
    	  		$row_auteur = mysql_fetch_assoc($auteur);
    		}

    Mais ne fonctionne pas vraiment... par exemple si le premier livre de ma table ne comporte qu'un auteur et pas d'artiste ni d'auteur de pr�face, j'ai tout de m�me les trois ligne afficher avec les donn�s des autres livres.

    Quelqu'un voit il d'o� peut venir le probl�me?

    Merci pour votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    22
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Par d�faut
    oulala, je viens de me relire et m�me moi je ne comprend rien.
    J'ai �cris �a un peu tard apr�s m'�tre pris longuement la t�te et le r�sultat n'est pas joli...

    je n'ai toujours pas de solution � mon probl�me, mais � t�te repos�, je pense que le probl�me vient de la structure de mes table et de la mod�lisation de ma BDD.

    Enfaite voici le topo.

    J'ai des livres. Un livre peux avoir un ou plusieurs auteurs. un auteur peut avoir diff�rents statuts (artiste, auteur, auteur de pr�face).

    Je pense donc (contrairement � ce que j'ai mis plus haut) qu'il ne me faut qu'une table auteur avec un champ statut permettant de d�finir le statu.

    Est-ce que cela vous semble correct?

    Par contre en php, lorsque je rempli ma base comment cela se passe-t'il?

    avez vous des exmples � me fournir?
    je vous en serait tr�s reconnaissant.

    Cdt,
    Mathieu

  3. #3
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par d�faut
    je pense qu'il faudrait plut�t 3 tables

    Code x : 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
    table Livre
    id_livre      titre_livre
    1             Le grand chaperon vert
    2             La royaume de la nuit
    
    
    table Personne
    id_personne   nom_personne
    1             Herve Green
    2             Wicky Apfelstrudel
    3             Tom Hun
    4             Ignace Magace
    
    
    table Relation
    id_personne   id_livre   id_relation
    4             1          1               # Ignace Magace est l'auteur de "Le grand chaperon vert"
    1             2          1               # Herve Green est le co-auteur de "La royaume de la nuit"
    2             2          1               # Wicky Apfelstrudel est la co-auteur de "La royaume de la nuit"
    3             2          2               # Tom Hun a �crit la pr�face de "La royaume de la nuit"
    3             2          3               # Tom Hun a dessin� les illustrations de de "La royaume de la nuit"

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    22
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Par d�faut
    Merci nosferapti

    Ca me semble plut�t pas mal ce que tu proposes.
    La table relation est effectivement tr�s utile.
    Surtout �a pallie � toutes les difficult�s que j'ai rencontr� et c'est tr�s propre.

    Je vais partir sur cette structure.

    Merci encore
    Cdt,
    Mathieu

  5. #5
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par d�faut
    ah je n'avais pas vu que tu �tais aussi un "Mathieu" avec un seul "t" comme moi

    au sujet de ta question de comment �a se passe en base, il s'agit d'insertion normales comme si c'�tait des tables seules. il faut juste faire attention � l'ordre des insertion, d'abord les tables Livre et Personne et ensuite tu utilises les identifiants de ces tables pour remplir la table Relation

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    22
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Par d�faut
    Tout d'abord, merci pour tes r�ponses.

    Jai fais comme tu me l'as conseill�.

    J'ai donc trois tables

    livre
    --------
    auteur
    ----------
    relation
    ---------

    j'arrive bien a faire les ajouts d'auteur et de livre ainsi que faire la relation dans ma partie admin.

    Tout est tr�s logique dans la BDD

    Par contre pour afficher dans ma page je s�che un peu.

    je souhaite ajouter l'ensemble des ouvrage de ma base. je fais donc :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    <?php  mysql_select_db($database_dbprotect, $dbprotect);
    mysql_query("SET NAMES UTF8"); 
    $query_livre = "SELECT * FROM livre ORDER BY livre.id_livre DESC";
    $livre = mysql_query($query_livre, $dbprotect) or die(mysql_error());
    $row_livre = mysql_fetch_assoc($livre);
    ?>
    ici je s�lectionne donc tout ce qui se trouve dans ma table livre
    Ensuite pour afficher le r�sultat je fais :

    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
     <?php
    do {  
    ?>
     
    <a href="fiche_ouvrage.php?id_livre=<?php echo  $row_livre['id_livre']; ?>"><img src="images/<?php echo  $row_livre['couverture']; ?>" border="0"></a></div>
     
    <h2> <?php echo  $row_livre['titre_livre']; ?> </h2>
     
    Artiste :nom de l'artiste <br/>
    Préface :nom du préfacier <br/>
    Auteur : nom de l'auteur
     
                  <?php
    	} while ($row_livre = mysql_fetch_assoc($livre));
     		$rows = mysql_num_rows($livre);
      		if($rows > 0) {
          		mysql_data_seek($livre, 0);
    	  		$row_livre = mysql_fetch_assoc($livre);
    		}
    ?>
    Cela fonctionne et affiche les ouvrages se trouvant dans la table livre.

    ce que je souhaite faire, c'est afficher le nom de l'artiste (s'il y en a un), le nom du pr�facier (s'il y en a un), le nom de l'auteur (s'il y en a un).
    Ces informations sont pr�sentes dans ma table relation.
    Mais pour afficher cela, j'ai besoin des infos de la table relation et de la table auteur (pour r�cup�rer les nom et pr�nom).

    mais je ne vois pas comment faire. J'ai essayer de faire dans ma requ�te :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    $query_livre = "SELECT * FROM livre, auteur, relation ORDER BY livre.id_livre DESC";
    $livre = mysql_query($query_livre, $dbprotect) or die(mysql_error());
    $row_livre = mysql_fetch_assoc($livre);
    Mais la, tu t'en doute, j'ai des doublon dans l'affichage puisque ma boucle while a beaucoup plus d'enregistrement.

    Est-ce que tu aurais un conseille � me donner?

    Merci d'avance,
    Cdt,
    Mathieu

Discussions similaires

  1. liaison entre les tables
    Par celticval dans le forum Access
    R�ponses: 19
    Dernier message: 05/04/2006, 16h49
  2. [MySQL] requete avec liaisons avec plusieurs tables
    Par pod1978 dans le forum PHP & Base de donn�es
    R�ponses: 1
    Dernier message: 10/03/2006, 22h21
  3. Relations entre plusieurs tables bloquent un �tat
    Par aujero dans le forum Access
    R�ponses: 5
    Dernier message: 07/02/2006, 12h07
  4. [D�butant] requete entre plusieurs tables
    Par xufux dans le forum Langage SQL
    R�ponses: 2
    Dernier message: 10/08/2005, 14h00
  5. liaison entre plusieurs base de donnee
    Par GMI dans le forum Bases de donn�es
    R�ponses: 1
    Dernier message: 15/12/2004, 18h42

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