2

カスタムクエリを使用して wp 投稿を取得しようとしています。SQLクエリは次のとおりです。

SELECT p.*, IFNULL(SUM(vote), 0) AS vote_count, CAST(m.meta_value AS SIGNED) AS idea_count
FROM wp_posts p
INNER JOIN wp_term_relationships r ON p.ID=r.object_id
INNER JOIN wp_term_taxonomy t ON t.term_taxonomy_id=r.term_taxonomy_id AND t.taxonomy='category'
LEFT JOIN wp_wdpv_post_votes v ON v.post_id=p.ID
LEFT JOIN wp_postmeta m ON m.post_id=p.ID AND m.meta_key='ideas_count'
WHERE p.post_status='publish' AND p.post_type='post' AND t.term_id='5'
GROUP BY p.ID
ORDER BY p.ID DESC
LIMIT 0, 8

このSQLクエリは正常に機能しています。しかし今、別のケースがあります。このクエリを使用して投稿を表示したいのですが、特定のメタ キーを持たない投稿のみを表示します。フィルタリングするメタキーは

'private_spaces_post'

これは、mysql クエリに固有のものである可能性があります。しかし、誰かがこの問題の解決策を教えてくれれば、とても感謝しています。

4

1 に答える 1

6

を持っているLEFT JOINものだけを返すサブクエリに対して、 を探すことができますprivate_spaces_postNULL

SELECT p.*, IFNULL(SUM(vote), 0) AS vote_count, CAST(m.meta_value AS SIGNED) AS idea_count
FROM wp_posts p
  INNER JOIN wp_term_relationships r ON p.ID=r.object_id
  INNER JOIN wp_term_taxonomy t ON t.term_taxonomy_id=r.term_taxonomy_id AND t.taxonomy='category'
  LEFT JOIN wp_wdpv_post_votes v ON v.post_id=p.ID
  LEFT JOIN wp_postmeta m ON m.post_id=p.ID AND m.meta_key='ideas_count'
  /* LEFT JOIN subquery returning only ids that *do* have the meta key */
  LEFT JOIN (
    SELECT post_id FROM wp_postmeta WHERE meta_key='private_spaces_post'
  ) psp ON p.ID = psp.post_id
WHERE p.post_status='publish' AND p.post_type='post' AND t.term_id='5'
  /* And find post ids from the main table that *don't* have a match in the subquery (LEFT JOIN returns NULL) */
  AND psp.post_id IS NULL
GROUP BY p.ID
ORDER BY p.ID DESC
LIMIT 0, 8
于 2012-12-03T18:25:56.070 に答える