2014-03-02 55 views
0

我有5台是那些:选择要求选择5桌

my_books表:

  • id_book
  • 标题
  • 价格
  • 描述

genre表:

  • id_genre
  • 类型(在此列类型描述)

genre_ind表:

  • id_book
  • id_genre(表结合体裁和书籍表)

authors表:

  • id_author
  • 作者(在本专栏作者姓名)

author_ind表:

  • id_book
  • id_author

我需要连接表来按流派ID选择所有图书信息。由于存储在其他表上的作者信息需要根据书籍ID添加作者信息。

尝试这样做,在一个单一的查询,到目前为止,我有以下查询:

SELECT my_books.id_book, 
      my_books.title, 
      my_books.price, 
      my_books.descrip, 
      a.genre, 
      s.authors 
    FROM my_books 
LEFT JOIN genre_ind 
     ON my_books.id_book = genre_ind.id_book 
LEFT JOIN genre a 
     ON genre_ind.id_genre = a.id_genre 
LEFT JOIN author_ind 
     ON books.id_book=author_ind.id_book 
LEFT JOIN authors s 
     ON author_ind.id_author=s.id_author 
    WHERE author_ind.id_book=my_books.id_book 
     AND genre_ind.id_genre=%d 

我拥有实用的查询,如果我需要根据类型ID从my_books信息选择信息,但后来我尝试扩展它来选择作者信息,它不起作用!

更新:

现在代码一刀看起来是这样的:

SELECT my_books.id_book, 
      my_books.title, 
      my_books.price, 
      my_books.descrip, 
      a.genre, 
      s.authors 
     FROM my_books 
LEFT JOIN genre_ind 
     ON my_books.id_book = genre_ind.id_book 
LEFT JOIN genre a 
     ON genre_ind.id_genre = a.id_genre 
LEFT JOIN author_ind 
     ON my_books.id_book = author_ind.id_book 
LEFT JOIN authors s 
     ON author_ind.id_author = s.id_author 
    WHERE genre_ind.id_genre=%d 

,我得到的错误是:MySQL的:#1054 - 在 '字段列表'

未知列 's.authors'

谢谢你的帮助,真的很感谢

好了,问题解决了。非常感谢你的时间和帮助!

正确一刀:

SELECT my_books.id_book, 
      my_books.title, 
      my_books.price, 
      my_books.descrip, 
      a.genre, 
      s.author 
     FROM my_books 
LEFT JOIN genre_ind 
     ON my_books.id_book = genre_ind.id_book 
LEFT JOIN genre a 
     ON genre_ind.id_genre = a.id_genre 
LEFT JOIN author_ind 
     ON my_books.id_book = author_ind.id_book 
LEFT JOIN authors s 
     ON author_ind.id_author = s.id_author 
    WHERE genre_ind.id_genre=%d 
+0

怎么不工作?你能否提供关于错误的更多细节? –

+0

警告:mysql_num_rows():提供的参数不是有效的MySQL结果资源 –

+0

你能尝试删除where子句并检查它的工作吗? – DevelopmentIsMyPassion

回答

0

的第一个问题是这样的on条款:

ON books.id_book=author_ind.id_book 

称为books什么都还没有确定。

第二个问题是where子句正在取消left outer join的影响。

也许你的意思是这样的:

FROM my_books LEFT JOIN 
     genre_ind 
     ON my_books.id_book = genre_ind.id_book LEFT JOIN 
     genre a 
     ON genre_ind.id_genre = a.id_genre LEFT JOIN 
     author_ind 
     ON my_books.id_book = author_ind.id_book LEFT JOIN 
---------^ changed from `books` 
     authors s 
     ON author_ind.id_author=s.id_author 
WHERE genre_ind.id_genre=%d 
+0

ops,我确实想念books.id_book :)谢谢,改成my_book.id_book 错误依然存在。你能否指定我是否改变WHERE语句如何告诉quire在author_ind中选择authors id与id_books比较? –

+0

更新后出现以下错误: #1054 - '字段列表'中的未知列's.authors' –

+0

@metamorph_online:您的列名是'author',但您使用'authors'。纠正它 –