2014-05-09 2 views
0
  • 나는 하나의 테이블이라는 영역이 있는데, "관광, 유흥, 서쪽 끝, 식사"등의 태그 필드가있는 영역을 추가했습니다.
  • 는 지금은

Area | TagNames ------ ------------- New York Tourist, NightLife Switzerland Tourist, Dining London NightLife, West Ends, Tourist . . . . . . . . 다음과 같이 내가 태그 이름 "관광"이 지역을 찾을 찾으려면여러 개의 태그 이름 위치를 찾는 데 도움이 필요합니다.

, 이제 내 질문은, 내가 테이블에 같은 필드가 어떤 기록을 가지고 "NightLife", 누구든지 나에게 그 질문을 말할 수 있습니까? FIND_IN_SET은 작동하지만 하나의 레코드가 발견되면 작동합니다. 예 FIND_IN_SET("Tourist", TagNames)이지만 여러 개의 태그 이름에 대해서는 작동하지 않습니다. 그래서이 문제를 해결하는 방법을 알려주세요.

답변

1

우선 내가한다면 그 수는 스키마가 당신에게 문제에 대답하기 위해 당신이 FIND_IN_SET() 많은 태그가 당신이 비교하려는 이름을 시간과 운영자

SELECT * FROM `table` 
WHERE FIND_IN_SET('Tourist', TagNames) >0 
AND FIND_IN_SET('NightLife', TagNames) >0 
and so on ... for multiple tags 
를 사용해야합니다, 첫 번째 우선 순위에 정상화 변경할 수 있습니다 위의 구조

Database Normalization

난 당신이 접합 테이블로 모든 태그 및 기타 테이블을 저장하거나 단일하지 다시 각 영역에 대해 여러 개의 태그를 저장할 연관 테이블로 말할 것이다 하나 개의 태그 테이블을 가질 필요가 말할 것 행

테이블

지역 테이블

ID name 
1 xxx 

태그 테이블

ID name 
1 xxx 
2 yyy 

지역 태그

ID area_id tag_id 
1 1  1 
2 1  2 

A의 10

구조 쿼리를

가입

추가 색인 area_id,tag_id에 추가 색인

+0

감사합니다. 그러나 실행하는 데 너무 많은 시간이 걸립니다. 나는 이미 그것도 시도했다. 나는 약간의 최적화 방법을 원한다. 그래서 당신이 있다면 알려주세요. 여기서는 하나 또는 두 개의 태그를 설명하지만 예제에는 거의 10 개의 태그 검색 기준이 있습니다. 그래서 너무 많은 시간이 걸렸습니다. 그게 왜 내가이 질문을 게시했는지 – KinjalMistry

+0

@ user3540050 내 업데이트 된 답변 –

+0

을 참조하십시오.'area tags''id'는 중복되어야합니다.이 경우 DISTINCT도 중복 될 것입니다! – Strawberry

관련 문제