2014-10-13 1 views
0

LEFT OUTER JOIN을 사용하여 3 개의 테이블에 연결하려고합니다. 내가 제대로하고 있는지 확실하지 않습니다.왼쪽 외부 조인 - PDO를 사용하여 여러 테이블의 데이터 가져 오기

테이블은 다음과 같습니다 요금, 국가와 service_types

검색어 :

$sql = "SELECT rates.rate_id, rates.initial_change, service_types.service, countries.country 
FROM rates 
LEFT OUTER JOIN service_types ON rates.service_id = service_types.serviceType_id 
LEFT OUTER JOIN countries ON rates.from_id = country.country_id 
LEFT OUTER JOIN countries ON rates.to_id = country.country_id 
ORDER BY service_types.serviceType_id ASC"; 
$statement = $con_db->exec($sql); 
$result = $statement->fetchAll();//error points to this line 

이 오류 메시지입니다 :

치명적인 오류 : (멤버 함수 fetchAll에 문의) 안에있는 비 대상에

+0

줄 오류가 가리키는, 아마도 문제가 아닙니다 - 나는 $ con_db-> exec ($ sql) 때문에 $ result가 null이기 때문에 오류가 발생한다고 생각합니다. 아무것도 돌려주지 않는다. 왜 query()가 아닌 exec()를 사용하고 있습니까? mysqli 객체를 사용하여 데이터베이스에 연결한다고 가정한다. –

+0

@ 존 스토리 감사. 나는 pdo를 사용하고있다 – Fergoso

+0

아, 물론 질문의 제목에 대문자로 "PDO"를 넣을 때 나는 약간의 단서를 찾지 않았다 : p - 나는 여전히 더 간단한 쿼리로 시도 할 것이다. 당신은 결과를 돌려주는 것을 알고있다). 작동하는 경우, 쿼리가 아무 것도 반환하지 않는 것입니다. 왜 왼쪽 외부 조인을 사용하고 있습니까?이 쿼리로 실제로 무엇을하려합니까? –

답변

1

내가 알아 차 렸던 것은 테이블에 액세스하는 것이 올바르지 않습니다. SQL이 무효 인 것 같아서 exec에서 null이 반환됩니다. 여기에 검색어를 변경해보십시오 :

$sql = "SELECT rates.rate_id, rates.initial_change, service_types.service, countries1.country, countries2.country 
FROM rates 
LEFT OUTER JOIN service_types ON rates.service_id = service_types.serviceType_id 
LEFT OUTER JOIN countries as countries1 ON rates.from_id = countries1.country_id 
LEFT OUTER JOIN countries as countries2 ON rates.to_id = countries2.country_id 
ORDER BY service_types.serviceType_id ASC"; 

참고 국가는 선택도 열을 조인 조건에 countries1 & countries2로 변경합니다.

+0

Woops, 나는 실수를했다. 별칭이있는 업데이트 된 버전을 확인하십시오. 기본적으로, 같은 테이블에 두 번 가입하는 경우 테이블을 별칭 지정해야합니다. 그렇지 않으면 단지 '국가'를 참조하기 만하면 어떤 테이블을 참조하는지 알 수 없습니다. –

+0

감사합니다. 지금 그것은 작동한다! – Fergoso

+0

당신을 진심으로 환영합니다! :) –