2009-09-04 57 views
2

我正在編寫一個幫助用戶之間預訂交換的應用程序。 我正在使用PHP和MySQL,我對他們都很新。如何爲這5個表編寫SQL查詢?

我有5張桌子,3級數據表和2個服表:

  1. 用戶:與用戶屬性(USER_ID,姓名,出生日期...等)。

  2. book:帶書屬性(book_id,name,author,publisher ...等)。

  3. copy:代表書籍的實際副本(copy_id,condition,comments ...等)。

  4. user_copy:描述哪個用戶持有哪個副本,由用戶ID和副本ID組成。

  5. copy_book:代表拷貝和書籍的連接,組成了copyID和BOOKID的

我的問題是: 什麼是獲得 書屬性和屬性複製的最簡單,最有效的聲明對於用戶擁有的每個副本?

+5

爲什麼你有一個單獨的'copy_book'表?在我看來,在「copy」表上有一個'bookID'列會更有意義。通常情況下,如果書和副本之間存在多對多關係,那麼您只需要一個類似「copy_book」的表格,我不相信情況是這樣的 – 2009-09-04 19:39:37

回答

6

您需要內部連接您感興趣的所有表:book,copy,user_copy和copy_book。返回SELECT語句屬性在用戶所持可能看起來像這樣所有副本:

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> 

我希望這是很清楚的聲明做什麼,但如果你有任何問題,請詢問。