2009-09-04 6 views
2

J'écris une application qui aide à réserver des échanges entre utilisateurs. J'utilise PHP et MySQL, et je suis assez nouveau à eux deux.Comment écrire une requête SQL pour ces 5 tables?

J'ai 5 tables, 3 tables de données et 2 tables de service:

  1. utilisateur: avec les attributs utilisateur (user_id, nom, naissance ... etc).

  2. livre: avec les attributs du livre (nom du livre, nom, auteur, éditeur ... etc). Copy: représente les copies réelles d'un livre (copy_id, condition, commentaires ... etc). User_copy: indique quel utilisateur contient quelle copie, composée d'ID utilisateur et d'ID de copie.

  3. copy_book: représente la connexion de la copie et le livre, composé de copyID et bookID

Ma question est: quelle est la déclaration la plus facile et la plus efficace pour obtenir les attributs de livres et de copier les attributs pour chaque copie qu'un utilisateur détient?

+5

Pourquoi avez-vous une table 'copy_book' séparée? À mon avis, il serait plus logique d'avoir une colonne 'bookID' sur la table' copy'. Habituellement, vous n'avez besoin que d'une table comme 'copy_book' s'il y a une relation plusieurs-à-plusieurs entre les livres et les copies, ce que je ne crois pas être le cas –

Répondre

6

Vous devez joindre toutes les tables qui vous intéressent: book, copy, user_copy et copy_book. L'instruction SELECT qui renvoie les attributs sur toutes les copies détenues par un utilisateur peut ressembler à ceci:

SELECT B.bookID 
     , B.name 
     , B.author 
     , B.publisher 
     , C.condition 
     , C.comments 
     -- you may get other fields that you are interested in here.. 
    FROM book B 
     INNER JOIN copy_book CB ON B.bookID = CB.bookID 
     INNER JOIN user_copy UC ON UC.copyID = CB.copyID 
     INNER JOIN copy C ON C.copyID = UC.copyID 
    WHERE UC.userID = <the user Id that you want> 

J'espère qu'il est assez clair que la déclaration fait, mais si vous avez des questions, s'il vous plaît demander.

Questions connexes