MySQL查询基于3个表

Man*_*era 1 php mysql

我使用PHP.我有一张名为books的桌子.在表格书中,我有书book_name的名称,book_publisher出版商的ID和book_author作者的ID.除了书籍表,我还有books_author表格,其中包含作者姓名和身份证明以及books_publisher图书出版商名称和身份证明.

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

问题是我在书籍表中只存储了作者的id和发布者ID,我需要搜索所有三个字段并排除重复项(按名称和出版商匹配的书籍).

有人可以帮我构建这个查询吗?

cle*_*tus 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 '...'
Run Code Online (Sandbox Code Playgroud)

通常在这些情况下,搜索框是可选的,因此您需要动态构造查询,这意味着WHERE如果用户实际输入了发布者名称,则该子句仅过滤发布者名称.

此外,搜索LIKE '%blah%'不可扩展到超过数千或可能数万条记录.没有索引可以满足这一要求.您可能希望使用类似MySQL全文搜索的内容.

最后,确保您清理输入,即通过所有输入字段mysql_real_escape_string().