2012-12-03 38 views
2

只得到帖子我想使用自定義查詢獲取wp文章。這裏是sql查詢:wordpress自定義mysql查詢,只有特定的meta_key不存在

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查詢工作正常。但現在我有另一種情況,我想在哪裏顯示使用此查詢的帖子,但只有沒有特定元鍵的帖子。 Meta過濾器的關鍵是

'private_spaces_post' 

這可能是特定於mysql查詢。但是,如果有人能爲我解決這個問題,我會非常感激。

回答

5

可以LEFT JOIN對一個子查詢只返回那些private_spaces_post,尋找NULL小號

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 
+0

+1在打字這個解決方案比我速度更快 –

+0

你認爲它會如果我們只是像'LEFT JOIN wp_postmeta m2 ON m2.post_id = p.ID AND meta_key ='private_spaces_post''沒有子查詢 –

+0

@AatifFarooq它可能會更快。你仍然需要'WHERE'子句組件。 –