私はPHPで動作します。私は本と呼ばれるテーブルを持っています。テーブルの書籍では、書籍の名前をbook_name
、投稿者IDがbook_publisher
、投稿者IDがbook_author
です。書籍の表に加えて、著者の名前とIDを持つbooks_author
テーブルと書籍の出版社の名前とIDを持つbooks_publisher
テーブルがあります。3つのテーブルに基づくMySQLクエリ
私は、著者名、書籍名、出版社名、および検索ボタンを表す3つの入力フィールドをユーザーに提供します。同じ検索で著者名、書籍名、出版社名を入力することができます。データベースを照会し、著者名LIKE(%..%)入力された著者名、書籍名LIKEなどの書籍名を返す必要があります名前および発行者名LIKE入力された発行者名。
問題は、書籍のテーブルに著者のIDと出版社のIDのみを格納していて、3つのフィールドすべてを検索して重複を除外する必要があるということです(名前と出版社によって一致する書籍)。
誰でもこのクエリの作成を手伝ってもらえますか?場合にのみ、たとえば、発行者名を上のフィルタにWHERE
句を意味し、あなたが動的にクエリを構築する必要がありますので、検索ボックスがオプションであるこのような状況では通常
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 '...'
:
+1全文検索の提案 – karim79
スフィンクスの検索では、テキストフィールドのインデックスを作成することがさらに優れています。 MySQLの組み込み全文索引付けよりもはるかに高速で、ステミングなどをサポートしています。 –
本当にありがとうございます! –