두 개의 테이블이 있습니다. 하나는 items
이고 하나는 tags
입니다. 검색어의 hereMysql Join Query는 동일한 결과를 여러 번 제공합니다.
아이디어는 검색 상자를 만들어 항목을 검색 한 다음 태그를 선택하여 검색 범위를 좁히는 것입니다. (어떤 종류의 패싯 검색).
MySQL의 자습서와 주변 하구 후 나는이 함께했다 :
SELECT `items`.`id`, `items`.`name`, `items`.`pay`, `items`.`desc`
FROM `items`LEFT JOIN (`tags`) ON (`tags`.`item_id`=`items`.`id`)
WHERE (
(`tags`.`type`='food' AND `tags`.`name`='pizza')
OR (`tags`.`type`='drinks' AND `tags`.`name`='lemonade')
--And so on for every tag
)
ORDER BY `pay` DESC LIMIT 0 , 30
는 (필자는 쿼리의 전체 텍스트 검색을 제거 그것은 지금 관련되지 않기 때문에)
그것은 꽤 작동 사용자가 어떤 태그를 선택하지 않는 경우, 더 후 1 개 태그가 모든 항목에 부착
- 더 후 1 시간 ,369을 보여줍니다 좋은,하지만 난이 문제가
- 사용자가 food => pizza and drinks => 예를 들어 레모네이드라는 두 개의 태그를 선택하면 피자 나 레모네이드가있는 모든 항목 또는 두 가지 모두가 표시됩니다. 태그가 첨부 된 항목 만 필요합니다.
다른 mysql 쿼리로 이러한 문제를 해결할 수 있습니까? 아니면 PHP 코드에서 이러한 문제를 해결해야합니다. (아니면 완전히 잘못하고 있는데, 태그를 사용하는 것이 더 나은 방법일까요?)
잘하면 나는 분명히했습니다.
할머니,
바스
감사합니다. 마지막 쿼리가 완벽하게 작동했습니다! – Bas
Btw,이 좋은 mysql 연습입니까? – Bas
정말 대답하기 어려운 질문입니다 ...성능에 관한 한 적절한 인덱스를 설정하는 한 괜찮을 것입니다. 제 의견으로는 올바르게 일관되게 작동하고 응용 프로그램에 '충분히 빠릅니다'라고 대답하면됩니다. – vicatcu