이 내가 검색 만든 간단한 대다 쿼리를 가지고 조인 검색 결과를 분류 :MySQL은
SELECT article.*, COUNT(article.id) as hits
FROM article
JOIN article_tag ON article.id = article_tag.article_id
JOIN tag ON tag.id = article_tag.tag_id
WHERE (
tag.title = "Foo"
OR tag.title = "Bar"
OR tag.title = "Foo Bar"
OR article.title LIKE "%Foo%"
OR article.title LIKE "%Bar%"
OR article.title LIKE "%Foo Bar%"
)
AND (article.start <= NOW() OR article.start IS NULL)
AND (article.end > NOW() OR article.end IS NULL)
AND (article.type = 'USER')
AND article.enabled = 1
GROUP BY article.id
ORDER BY hits DESC LIMIT 0, 16
탐색 충분히 잘 작동하지만 '히트'가 잘 될 수 없습니다보고 그래서 정렬은 꺼져 있습니다.
편집 : 내 문제를 조금 더 잘 설명 할 수 있다고 생각합니다. I가 첫 번째 라인을 변경하는 경우 :
SELECT article.title, tag.title
제거 GROUP BY와 ORDER BY, ALL 참조 tag.titles으로 문서 제목과 일치하는 결과 목록 - 그래서 대부분의 태그 기사합니다 (searchword 일치 여부) 가장 많은 조회수를 기록합니다.
당신은'선택 기사. * ... GROUP BY article.id'해서는 안됩니다. 이것은 당신에게 예기치 않은 결과를 줄 것입니다. ANSI 표준'GROUP BY'를 사용하십시오. – Kermit
@Kermit : 아니요. 이것은 MySQL에 의해 해석되므로 SQL 표준입니다. ID는 기사 레코드를 고유하게 식별하므로 집계없이 모든 열에 액세스 할 수 있습니다. –
@saibotd : 기사와 일치하는 태그의 수를 선택합니다. 결과에 대해 무엇을 잘못 생각합니까? 예제를 줄 수 있습니까? –