SQL을 사용하여 간단한 검색 기능을 사용하고 있습니다. GROUP_CONCAT을 사용하여 모든 키워드를 단일 행에 넣습니다. 키워드는 카테고리에서 가져옵니다.mysql에서 일치하는 위치와 그룹 연결
이 예에서는 일부 열이있는 것은 아닙니다. 나는
SELECT
p.id as id,
p.title as title,
p.title as company,
GROUP_CONCAT(DISTINCT cat.title SEPARATOR " ") as keywords,
FROM products p
JOIN product_categories pc ON p.id = pc.product_id
JOIN categories cat ON pc.category_id = cat.id
JOIN companies co ON p.company_id = co.id
WHERE MATCH (p.title) AGAINST ("Test")
OR MATCH (co.title) AGAINST ("Test")
GROUP BY p.id
keywords
이 keyword1 keyword2 keyword3
같은 것을 포함 아래로 박탈했습니다.
위의 SQL이 작동합니다. 그러나 가상 값 keywords
값을 갖는 MATCH AGAINST를 사용할 수 없습니다.
이를 추가합니다 :
HAVING keywords LIKE "%keyword1%"
LIKE 아마 느리고있는 것은 GROUP 후이기 때문에 내가 사용하는 정도에 HAVING 수 없습니다에 의해 이 경우는 WHERE를 대체합니다.
이상적으로는 keywords
의 MATCH AGAINST도 사용하고 싶습니다. 그래서, 내 선택권은 무엇입니까?
- 가상 테이블의 일종입니까?
- 하위 쿼리?
- 다른 건 없나요?
이해하기 위해서는 예제 코드가 필요할 것입니다.
예, 지금까지는 빠른 제품이었습니다 (4000 제품). 어떤 이유로 GROUP_CONCAT은 검색된 단어 만 반환하지만 코드에는 아무 것도 없다고 생각됩니다. 출력에 범주를 포함시키는 것도 좋을 것입니다. 그러나 그것은 이상합니다. –
"k.title IN"은 MATCH 조건 자'MATCH (k.title) AGAINST 'Test'로 대체해야합니다. 하지만 원래 쿼리 (질문에 표시된)에'OR EXISTS'를 추가하는 것이'GROUP_CONCAT'에서'cat.title'에 대해 반환되는 행에 영향을 미칠 것이라고 생각하지 않습니다. (답변의 두 번째 쿼리는 'cat.title'을 반환하지는 않습니다. 왜냐하면 거기에 조인'categories' 테이블이 없으므로 사용할 수 없습니다.이 답변은 묻는 질문에 응답하지 않으며 다른 질문에 답합니다.) – spencer7593