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 に答える