2017-11-22 4 views
0

아트 광고를위한 내부 DB/검색 엔진을 구축했습니다. 데이터베이스의 한 열을 쿼리하고 FullText Search를 사용하여 구문 검색을 위해 데이터베이스의 여러 열을 검색 할 수있는 검색 조건을 만들려고합니다. 검색 쿼리의 예는 November {and} Black Friday 일 수 있습니다. 11 월은 created_for 열과 일치하는 광고 소재를 검색하고 black friday는 전체 텍스트 검색으로 헤드 라인, 부제목 및 additional_text 열을 검색합니다. 이것을 달성하는 방법에 대한 아이디어는 정말 도움이 될 것입니다!간단한 MYSQL 문과 FullText 문을 결합 할 수 있습니까?

SELECT 
    (SELECT * FROM headlines WHERE created_for = '$searchString' AND image_slug <> '') 
    (SELECT *, MATCH(headline) AGAINST('$fullText' IN BOOLEAN MODE) AS MultiScore, MATCH(subheadline, additional_text) AGAINST('$fullText' IN BOOLEAN MODE) AS MultiSecondScore 
    FROM `headlines` 
    WHERE MATCH(headline, subheadline, additional_text) AGAINST('$fullText' IN BOOLEAN MODE)) 

나는 두 번째 선택 문 앞에 UNION 문을 추가하는 시도했지만, 나는 열이 일치하지 않는 없다는 오류 메시지가 표시됩니다. 내가 무엇을 잘못했는지 확신 할 수 없지만 사전에 도움을 주셔서 감사합니다!

+0

'(SELECT * ...) '를 식으로 사용할 수 없으므로 식은 단일 열이있는 단일 행만 반환 할 수 있습니다. – Barmar

답변

2

WHERE 절에 AND을 사용하십시오.

SELECT *, MATCH(headline) AGAINST('$fullText' IN BOOLEAN MODE) AS MultiScore, MATCH(subheadline, additional_text) AGAINST('$fullText' IN BOOLEAN MODE) AS MultiSecondScore 
FROM headlines 
WHERE created_for = '$searchString' 
AND image_slug <> '' 
AND MATCH(headline, subheadline, additional_text) AGAINST('$fullText' IN BOOLEAN MODE) 

UNION

그들의 기준 중 하나 둘 일치하는 결과를 얻을 것입니다. UNION을 사용하는 경우 두 하위 쿼리 모두 동일한 수의 열을 반환해야합니다. 첫 번째 쿼리의 MultiScoreMultiSecondScore 열과 일치하도록 첫 번째 쿼리에 열을 추가해야합니다.