2012-10-24 2 views
0

내가 다음 코드 비트가 엔트리 .A는 ZenCart의 주소록에 가입 수행하면

위에서 언급 한 5 개의 데이터베이스 테이블이 있습니다. 고객, 주소록, 리퍼러, 국가, 영역

하지만 어디서부터 시작해야할지 모르겠습니다. 이 주요 문제는 위의 문을 사용하여, 나는 선택에서 몇 가지 레코드를 잃는 것. 이것은 일부 레코드가 'zone_id'= 0을 사용하기 때문입니다.이 문제는 단순히 0에 대한 빈 레코드를 만드는 것이었지만 그 외에도 조인을 사용하여이를 수정할 수 있습니까?

+0

아마도 실제로 읽을 수 있도록 해당 쿼리를 다시 포맷 할 수 있습니까? 어쩌면 502 번 선인지 알 수 있을까요? 어쩌면'echo' 대신에'var_dump()'를 시도해 보시겠습니까? – Sammitch

+0

전체 질문을 모두 변경했지만 var_dump 메서드도 시도해 보겠습니다. –

답변

2

명시 적 JOIN의 작성 쿼리 :

SELECT c.customers_id, c.customers_firstname, c.customers_lastname, 
    c.customers_email_address, c.customers_telephone, a.entry_street_address, 
    a.entry_city, a.entry_state, a.entry_country_id, n.countries_name, 
    a.entry_zone_id, a.entry_postcode, r.referrer_customers_id, 
    r.referrer_key, r.referrer_homepage, r.referrer_approved, 
    r.referrer_banned, r.referrer_commission 
FROM customers AS c 
    JOIN referrers AS r ON (c.customers_id = r.referrer_customers_id) 
    JOIN address_book AS a ON (a.address_book_id = c.customers_default_address_id) 
    JOIN countries AS n ON (a.entry_country_id = n.countries_id) 
    LEFT JOIN {zones table name} AS z ON (z.{zones id column name} = a.entry_zone_id) 
ORDER BY c.customers_lastname 
: 당신이 일치가 존재하는 경우도 영역 테이블에서 정보를 얻고 싶다면

SELECT c.customers_id, c.customers_firstname, c.customers_lastname, 
    c.customers_email_address, c.customers_telephone, a.entry_street_address, 
    a.entry_city, a.entry_state, a.entry_country_id, n.countries_name, 
    a.entry_zone_id, a.entry_postcode, r.referrer_customers_id, 
    r.referrer_key, r.referrer_homepage, r.referrer_approved, 
    r.referrer_banned, r.referrer_commission 
FROM customers AS c 
    JOIN referrers AS r ON (c.customers_id = r.referrer_customers_id) 
    JOIN address_book AS a ON (a.address_book_id = c.customers_default_address_id) 
    JOIN countries AS n ON (a.entry_country_id = n.countries_id) 
ORDER BY c.customers_lastname 

것은이 같은 LEFT JOIN을 추가해야합니다

또한 선택하려는 열을 쿼리의 맨 위에 추가하십시오. LEFT JOIN은 항상 왼쪽 표 (첫 번째 열)에 결과를 반환하고 오른쪽 표에 일치 항목이없는 경우 오른쪽 표의 열에 대해 NULL을 반환합니다.

+0

정말 고마워요. 영역의 테이블 이름은 실제로 영역이었고 ID의 열은 zone_id이지만이를 파악할 수있었습니다. 이것은 완벽하게 작동합니다. –