2013-05-24 3 views
2

Нижеприведенный запрос не возвращает никаких значений для name1, так как он не имеет wp_postmeta.meta_key = 'wpcf-phone'. Я использую LEFT OUTER JOIN, думая, что он вернет результаты для name1, так как он имеет значения в wp_posts, но это только возвращаемые значения для name2, у которого есть wp_postmeta.meta_key = 'wpcf-phone'.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

Вы ссылаетесь внешнюю таблицу в которой положение в этой строке:

wp_postmeta.meta_key = 'wpcf-phone' 

тем самым устраняя все строки, в которых wp_postmeta.meta_key имеет нулевое значение, превращая ваш LEFT JOIN в INNER JOINNULL = 'wpcf-phone' является ложным).

Вы должны переместить условие объединения:

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

Работали лакомство, спасибо вам помочь! –

1

Когда OUTER JOIN «не удается подключиться» он заполняет поля в выходном сигнале с NULL значениями. Таким образом, вы можете использовать OR IS NULL для проверки этого условия. Таким образом, WHERE-условие должно быть что-то вроде:

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%') 
Смежные вопросы