2014-10-14 3 views
0

LEFT OUTER JOIN을 사용하여 여러 이야기에서 데이터를 가져 오려고하는데 치명적인 오류가 발생합니다.LEFT OUTER JOIN을 사용하여 여러 테이블 연결

테이블 이름, 필드 이름, db 연결이 정확합니다.

$sql = "SELECT shipping_info.shipping_id, service1.service, package1.package_type, countries1.country AS fromCountry, countries2.country AS toCountry, countries3.country AS resiCountry, customer1.name, 
FROM shipping_info 
LEFT OUTER JOIN service_types AS service1 ON shipping_info.service_type = service_types.serviceType_id 
LEFT OUTER JOIN package_types AS package1 ON shipping_info.package_type = package_types.packageType_id 
LEFT OUTER JOIN customer_info AS customer1 ON shipping_info.customer_id = customer_info.customer_id 
LEFT OUTER JOIN countries AS countries1 ON shipping_info.from_loc = countries1.country_id 
LEFT OUTER JOIN countries AS countries2 ON shipping_info.to_loc= countries2.country_id 
LEFT OUTER JOIN countries AS countries3 ON shipping_info.to_id = countries3.country_id 
ORDER BY shipping_info.order_date DESC"; 

치명적인 오류 : 나는 MySQL의 전문가가 아니에요에서 ....

+0

즉, 쿼리가 데이터를 반환하지 않으므로 개체가 아닙니다. PHP 외부에서 쿼리를 실행할 수 있습니까? –

+0

감사합니다. 미안 PHP 밖에서 무엇을 의미합니까? – Fergoso

+0

comnmand-line 또는 IDE를 통해 쿼리를 실행할 수 있습니까? –

답변

2

이에 쿼리를 변경하려고 :

SELECT s1.shipping_id, 
     s1.service, 
     p1.package_type, 
     c1.country fromCountry, 
     c2.country toCountry, 
     c3.country resiCountry, 
     c1.name 
FROM shipping_info si 
LEFT JOIN service_types s1 ON si.service_type = s1.serviceType_id 
LEFT JOIN package_types p1 ON si.package_type = p1.packageType_id 
LEFT JOIN customer_info c1 ON si.customer_id = c1.customer_id 
LEFT JOIN countries c1 ON si.from_loc = c1.country_id 
LEFT JOIN countries c2 ON si.to_loc= c2.country_id 
LEFT JOIN countries c3 ON si.to_id = c3.country_id 
ORDER BY si.order_date DESC; 
당신은 .. 또한 LEFT OUTER가 잘못된 구문으로 쿼리 자체에서 여러 오타 가입하고 LEFT했다

는 정확히 가입 같은

또한이 쿼리를 실행하는 방법을 게시 할 수 있습니까? 실제 실행 방법에 문제가있을 수 있습니다.

1

아닌 객체의 멤버 함수 fetchAll()를 호출, 그러나 이것은 잘못된 보인다. 조인의 ON 부분에 사용하지 마십시오 다음

LEFT OUTER JOIN service_types AS service1 
     ON shipping_info.service_type = service_types.serviceType_id 

당신은 테이블을주는이 서비스 1의 별칭 (상관 이름) service_types :하지만, 첫 번째 가입을 고려.

LEFT OUTER JOIN service_types 
     ON shipping_info.service_type = service_types.serviceType_id 
을 ...하거나 사용 : 내가 시도 할 첫 번째 것은 상관 이름이 제거되어 하나 당신이 컬럼의 이름에 그것을 사용하고 있기 때문에

LEFT OUTER JOIN service_types AS service1 
     ON shipping_info.service_type = service1.serviceType_id 

' 실제로 선택하면 조인의 ON 부분에서 사용합니다. 어느 것이 든간에 package_types 및 customer_info를 반복하고 시도하십시오.

0

방망이를 벗어났습니다. FROM 절 바로 앞에 쉼표가 추가 된 것을 볼 수 있습니다. 이로 인해 오류가 발생하여 비 개체 (예 : 제대로 포맷되지 않은 쿼리)에서 fetchAll을 실행할 때와 같은 오류가 발생할 수 있습니다.

테이블 별칭이 꽤 길기 때문에 줄이거 나 줄여서 전체 테이블 이름을 사용할 수 있습니다.

SELECT 
    si.shipping_id, 
    st.service, 
    pt.package_type, 
    c1.country AS fromCountry, 
    c2.country AS toCountry, 
    c3.country AS resiCountry, 
    ci.name 
FROM shipping_info si 
LEFT JOIN service_types st 
    ON si.service_type = st.serviceType_id 
LEFT JOIN package_types pt 
    ON si.package_type = pt.packageType_id 
LEFT JOIN customer_info ci 
    ON si.customer_id = ci.customer_id 
LEFT JOIN countries c1 
    ON si.from_loc = c1.country_id 
LEFT JOIN countries c2 
    ON si.to_loc= c2.country_id 
LEFT JOIN countries c3 
    ON si.to_id = c3.country_id 
ORDER BY si.order_date DESC; 

최근에 저는 MySQL Workbench를 사용하기로 이동했습니다. 그것은 확실히 체크 아웃 할만한 가치가 있습니다. 나는 PHPMyAdmin보다 낫다. 저에게 더 좋은 워크 플로우이고 테이블을 기반으로 ERD를 구축 할 역 엔지니어링 도구와 같은 멋진 도구가 있습니다. PHP 코드에서 사용하기 전에 쿼리를 테스트 해 보는 것이 좋습니다.

MySQL의 워크 벤치 http://www.mysql.com/products/workbench/

+0

흠이 내 검색어와 비슷합니다 .... ....... –

+0

흠 다른 별칭을 사용합니다. 그는 또한 내 테이블에있는 다른 테이블에서 shipping_id와 서비스를 가져 왔습니다. 이 방법을 너무 많이 잘라서 여러 가지 방법으로 잘라내는 것은 꽤 기본입니다. –

관련 문제