2013-03-21 5 views
0

Я пытаюсь выбрать таблицу pep_posts, а затем присоединиться к pep_postmeta, но таблица pep_postmeta является необязательной, если нет данных в таблице pep_postmeta, результат все еще может быть показан.left join optional table

ниже мой запрос, но этот запрос показывает только данные, если в таблице pep_postmeta есть данные, это не то, что я хочу.

select p.*, pm.* 
from `pep_posts` p 
left join `pep_postmeta` pm 
    on pm.post_id=p.ID 
where p.post_parent='".$current_page_id."' and 
    p.post_status='publish' and pm.meta_key='book_image' 

ответ

2

В левой присоединиться, если вы ссылаетесь на дополнительную таблицу в пункте WHERE, он все равно будет отфильтровывать только те строки, которые имеют значение в этой таблице. Что вам нужно сделать, это переместить условие на pm в предложение ON, где он не будет удалять строки, просто установите значения NULL.

SELECT p.*, pm.* 
FROM `pep_posts` p 
LEFT JOIN `pep_postmeta` pm 
    ON pm.post_id=p.ID and pm.meta_key='book_image' 
WHERE p.post_parent='".$current_page_id."' AND 
    p.post_status='publish' 
+0

спасибо .. я пропустил эту часть :) – rusly

1

Проблема в вашем WHERE условие

and pm.meta_key='book_image' 

Если pep_postmeta нет данных, значение pm.meta_key в вашем выборе будет NULL Таким образом, вы должны удалить этот Condtion или переписать его на что-то вроде это

and (pm.meta_key='book_image' or pm.meta_key IS NULL)