나는 테이블 내 데이터베이스 모델 (테이블)가 이름 복잡한 검색 문제
tags (id, name)
taggings (id, tag_id, taggable_id, taggable_type, context)
employment_histories (id, user_id, grades, subjects, my_interests)
users (id)
taggable_id
employment_histories_id
입니다 필드와 상황에 맞는 학년 또는 과목 또는 my_interests 지금
이 될 수 있습니다 예 : 태그 배열 g = { "9th", "10th"} 사용자를 얻고 싶습니다. 태그는 모두 위의 g 배열과 일치합니다. 나는 아래의 쿼리 작성했습니다
:
SELECT DISTINCT users.* FROM `users`
LEFT OUTER JOIN `employment_histories`
ON `employment_histories`.`user_id` = `users`.`id`
LEFT OUTER JOIN `taggings`
ON `employment_histories`.`id` = `taggings`.`taggable_id`
AND `taggings`.`taggable_type` = 'EmploymentHistory'
LEFT OUTER JOIN `tags` ON taggings.context = 'subjects'
WHERE tags.name='9th' OR tags.name='10th'
을하지만, 나에게 태그의 일치 너무하는 사용자를 제공하지만 나는 모든이 태그를 일치 해당 사용자가 반환 할
태그 9 번과 10 번에 9 번 태그와 10 번 태그가 있다고 가정하면이 tag_id (9와 10)에 공통 taggable_id가있는 taggable_id (즉 employhistories.id) 만 반환됩니다. 태깅 테이블
예를 들어 나는 두 사용자 tariq와 kamal이 두 사용자는 공통적으로 9 번째 태그를 가지고 있지만 kamal은 10 번째 태그를 가지므로이 두 태그는 tariq 만 반환해야합니다.이 태그는 모두이 두 태그를 처리하지만 kamal은 태그도 필터링해야합니다.
는 또한 태그 목록의 태그와 일치하는 나에게 사용자를주는 무슨 내가 그것을 원하는 방식으로 작업하지만 난 모든 태그는 다음과 일치해야하지 그렇지 않으면 사용자에게 그렇지 않다. –
@afridi, 쿼리가 업데이트되었는데, 더 잘 작동합니까? – Johan
아무 남자도 그 일을하지 않습니다 : ( –