PHP로 작업합니다. 나는 책이라는 이름의 테이블을 가지고있다. 표 책에는 책의 이름이 book_name
이고 발행자의 ID가 book_publisher
이고 저자의 ID가 book_author
입니다. books 테이블 외에도 필자 이름과 ID가있는 books_author
테이블과 책 출판사 이름과 ID가있는 books_publisher
테이블이 있습니다.3 개의 테이블을 기반으로 한 MySQL 쿼리
나는 저자 이름, 책 이름 및 발행자 이름과 검색 버튼을 나타내는 3 개의 입력 필드를 제공합니다. 그들은 동일한 검색에서 저자 이름, 책 이름 및 발행인 이름을 입력 할 수 있으며 데이터베이스를 조회하고 저자 이름이 LIKE (% .. %) 인 책 이름을 반환해야합니다. 입력 된 저자 이름, 책 이름 LIKE 입력 된 책 이름 및 게시자 이름 LIKE 입력 한 게시자 이름.
문제는 저자의 ID와 발행인의 ID 만 내 책 테이블에 저장 했으므로 세 필드를 모두 검색하여 중복 (이름과 게시자가 일치하는 책)을 제외해야한다는 것입니다.
아무도이 쿼리를 작성하는 데 도움을 줄 수 있습니까? 경우에만, 말, 게시자 이름을 필터링 할 수있는 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의 기본 제공 전체 텍스트 인덱싱, 형태소 분석을 지원하는 것보다 훨씬 빠름을 알고 있습니다. –
감사합니다. –