2009-07-07 3 views
1

3 개의 이벤트, 위치, event_location 테이블이 있습니다. 이벤트는 여러 위치를 가질 수 있습니다. 위치 테이블의 latitude, longitude, hasGeocode 필드가 있습니다. 키워드에 대한 그래서 키워드 검색, 여러 테이블, PHP 및 MySQL, 어느 가입 하시겠습니까?

에 "Hello World"가

이벤트 테이블에 대한 간단한 쿼리가된다

Select * from event where keywords like '%hello%' OR keywords like '%world%' 

하지만

그런 다음 사용자가 자신의 위치를 ​​입력 한 경우 나뿐만 아니라이 쿼리의 위치 테이블을 포함 할 경우 , 사용자가 위치 선택을 지정할 수 있도록하려면 어떻게해야합니까?

그래서 기본적으로 검색의 3 가지 유형

  • 그냥

  • 키워드 및 위치

  • 키워드 근접하고 위치

나는이 같은 시도를 키워드 쿼리 -

select * from event where keywords like '%hello%' OR 
    keywords like '%world%' INNER JOIN location ON 
    location.location_id = event_location.location_id 
    INNER JOIN 
    event_location ON event_location.event_id = event.event_id 

INNER JOINs 이벤트에는 하나 이상의 위치가 있어야합니다. 이벤트가 어떤 위치에 있지 않으면 검색 결과에 표시되지 않습니다. 그래서 제발 나를 도와주세요, 어떻게해야합니까?

도움 주셔서 감사합니다.

답변

2

. 어떤 경우 든, 내부 조인이이를 자르지 않으면 외부 조인을 사용하십시오. ;-)

또한 테이블 별명이 길면 특히 별칭을 사용하는 것은 좋지 않습니다.

+0

내 문제가 해결되었습니다. – Fil

1

사용 LEFT JOIN들 (나는 당신의 조인의 순서를 변경하고 잘못 된 where 절 위치, 고정)

select * from event LEFT JOIN event_location ON 
event.event_id = event_location.event_id 
LEFT JOIN 
location ON event_location.location_id = location.location_id 
where keywords like '%hello%' OR 
keywords like '%world%' 

당신이 위치하지 않고 이벤트에 대한 널 (null)을 얻을 것이다이 방법을.

또한, * 사용을 선택하지 않으려 고하지만, 관심있는 열 이름을 지정합니다. 당신은 모두가 엉망이 조인 구문을 당신이있어