2013-05-24 5 views
2

name1에 대한 값은 wp_postmeta.meta_key = 'wpcf-phone'이 아니기 때문에이 값을 반환하지 않습니다. 나는 LEFT OUTER JOIN을 사용하고 있는데, wp_posts에 값을 가지고 있기 때문에 name1에 대한 결과가 반환 될 것이라고 생각하지만, name2에 대한 반환 값은 wp_postmeta.meta_key = 'wpcf-phone'입니다. OUTER JOIN는 그 NULL 값 출력의 필드를 채우는 "연결 실패 'MYSQL LEFT OUTER JOIN 모든 결과를 반환하지 않는 쿼리

SELECT 
    wp_posts.ID, 
    wp_posts.post_content, 
    wp_posts.post_title, 
    wp_postmeta.meta_value AS phone 
FROM 
    wp_posts 
    LEFT OUTER JOIN wp_postmeta wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) 
WHERE 
    wp_posts.post_type = 'solicitors' AND 
    wp_posts.post_status = 'publish' AND 
    wp_postmeta.meta_key = 'wpcf-phone' AND 
    (wp_posts.post_title LIKE '%name1%' OR 
    wp_posts.post_title LIKE '%name2%') 
+0

왜 감사를 혼합하고 – Drew

답변

3

: 뭔가 것처럼 WHERE 절은 이렇게해야

wp_postmeta.meta_key = 'wpcf-phone' 

함으로써 wp_postmeta.meta_key가 null의 모든 행을 제거가 효과적으로 전환하여 LEFT JOININNER JOIN으로 변경하십시오 (NULL = 'wpcf-phone'이 false이므로).

당신은 가입에 조건을 이동해야합니다 : 당신이 도움을

SELECT 
    wp_posts.ID, 
    wp_posts.post_content, 
    wp_posts.post_title, 
    wp_postmeta.meta_value AS phone 
FROM 
    wp_posts 
    LEFT OUTER JOIN wp_postmeta wp_postmeta 
    ON (wp_posts.ID = wp_postmeta.post_id) 
    AND wp_postmeta.meta_key = 'wpcf-phone' 
WHERE 
    wp_posts.post_type = 'solicitors' AND 
    wp_posts.post_status = 'publish' AND 
    (wp_posts.post_title LIKE '%name1%' OR 
    wp_posts.post_title LIKE '%name2%') 
+0

필요 없다 치료를 근무하는 경우 where 절과 절에 일치! –

1

. 따라서 OR IS NULL을 사용하여이 조건을 테스트 할 수 있습니다. 당신은 당신이 줄 절 곳에서 외부 테이블을 참조하는

WHERE 
    wp_posts.post_type = 'solicitors' AND 
    wp_posts.post_status = 'publish' AND 
    (wp_postmeta.meta_key = 'wpcf-phone' OR 
     wp_postmeta.meta_key IS NULL) AND 
    (wp_posts.post_title LIKE '%name1%' OR 
     wp_posts.post_title LIKE '%name2%')