2009-08-09 105 views
1

我使用PHP工作。我有一张名为书籍的表格。在表格簿中,我有book_name这本书的名字,book_publisher与发行者的ID和book_author与作者的ID。除书籍表外,我还有books_author表,其中包含作者姓名和ID,books_publisher包含书籍出版商名称和ID。基于3个表的MySQL查询

我给我的用户3个输入字段,代表作者姓名,书名和出版商名称以及搜索按钮。他们可以在同一个搜索中输入作者姓名,图书名称和出版商名称,我必须查询我的数据库并返回具有作者姓名LIKE(%..%)的书籍名称输入的作者姓名,书名LIKE输入的书籍名称和发布者名称LIKE输入的发布者名称。

问题是,我在书籍表中只存储了作者的ID和发布者ID,我需要按这三个字段进行搜索并排除重复项(名称和发布者匹配的书籍)。

任何人都可以帮我建立这个查询吗?

回答

6

刚刚加入查询:

SELECT * 
FROM books b 
JOIN book_authors ba ON b.author_id = ba.id 
JOIN book_publishers bp ON b.publisher_id = bp.id 
WHERE b.book_name LIKE '...' 
AND ba.author_name LIKE '...' 
AND bp.publisher_name LIKE '...' 

通常在这些情况下,搜索框是可选的,所以你需要动态地构造查询,这意味着WHERE条款,如果只过滤,比如说,发布者名称用户实际输入了发布者名称。

此外,在LIKE '%blah%'上搜索不可扩展超过数千甚至数万条记录。没有索引可以迎合这一点。您可能需要考虑使用类似MySQL full-text searching的东西。

最后,请确保您已清理输入内容,即将所有输入字段通过mysql_real_escape_string()

+0

+1全文搜索建议 – karim79 2009-08-09 15:05:24

+0

更好的是用Sphinx搜索索引文本字段。我知道它比MySQL内置的全文索引快得多,支持词干等。 – 2009-08-09 15:59:44

+0

非常感谢! – 2009-08-09 17:53:23