0

我尝试选择表pep_posts然后左连接pep_postmeta但表pep_postmeta是可选的意味着如果表中没有数据pep_postmeta,结果仍然可以显示。

下面是我的查询,但如果表有数据,这个查询只显示数据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' 
4

2 回答 2

2

在左连接中,如果您在WHERE子句中引用可选表,它仍将仅过滤掉该表中具有值的行。您需要做的是将条件移至不会删除行pmON子句,只需将值设置为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'
于 2013-03-21T07:14:53.523 回答
1

您的 WHERE 条件中的问题

and pm.meta_key='book_image' 

如果 pep_postmeta 没有数据,则选择中的 pm.meta_key 值将为 NULL 因此,您应该删除此条件或将其重写为类似的内容

and (pm.meta_key='book_image' or pm.meta_key IS NULL)
于 2013-03-21T07:17:37.127 回答