2011-09-15 50 views
2

我正在尋找編寫單一的自定義SQL查詢來從我的6個特定類別的每個自定義文章類型中檢索最新的7篇文章。一個查詢從WordPress的每個類別中獲取最新的7篇文章

我知道如何查詢自定義帖子類型和分類法,但是我的SQL知識是有限的。我不知道如何讓WordPress給我6個類別中的每個最新的7個職位。只要內容在那裏,它返回的順序無關緊要。

例如:如果我有類別1,2,3,4,5,6,我想從每個類別中檢索7個最新帖子。具體來說,查詢應該提取7類最新的帖子,7類最新的帖子,等等,所有這些只需一個查詢。

我不想有6個獨立的WP_Query實例,因爲它效率不高。

+0

我碰到[»此頁面上的WordPress的食品法典委員會(http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query#Query_based_on_Custom_Field_and_Category)覆蓋自定義的SQL查詢,其中一個例子包括從特定類別拉入所有帖子,然後設置限制爲4. 我想要做的是設置一個類似的LIMIT,但對於每個類別,所以我可以從7個最新的帖子他們。 – Lasha

+0

我可能找到了解決方案,但我不確定這是否是最好的方法。任何人都可以提出改進或更好的方法來實現這一目標? [點擊此處查看解決方案](http://wordpress.stackexchange.com/questions/907/using-wp-query-to-query-multiple-categories-with-limited-posts-per-category) – Lasha

+0

請顯示錶格結構 - CREATE TABLE語句。它可以幫助我們解決您的問題。 – Devart

回答

0

你需要使用UNION像下面

SELECT wposts.* 
FROM $wpdb->posts wposts 
    LEFT JOIN $wpdb->postmeta wpostmeta ON wposts.ID = wpostmeta.post_id 
    LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id) 
    LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) 
WHERE wpostmeta.meta_key = 'customDateField' 
    AND wpostmeta.meta_value >= CURDATE() 
    AND $wpdb->term_taxonomy.taxonomy = 'category' 
    AND $wpdb->term_taxonomy.term_id IN(1) 
ORDER BY wpostmeta.meta_value ASC 
LIMIT 7 
UNION 
SELECT wposts.* 
FROM $wpdb->posts wposts 
    LEFT JOIN $wpdb->postmeta wpostmeta ON wposts.ID = wpostmeta.post_id 
    LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id) 
    LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) 
WHERE wpostmeta.meta_key = 'customDateField' 
    AND wpostmeta.meta_value >= CURDATE() 
    AND $wpdb->term_taxonomy.taxonomy = 'category' 
    AND $wpdb->term_taxonomy.term_id IN(2) 
ORDER BY wpostmeta.meta_value ASC 
LIMIT 7 
UNION 
SELECT wposts.* 
FROM $wpdb->posts wposts 
    LEFT JOIN $wpdb->postmeta wpostmeta ON wposts.ID = wpostmeta.post_id 
    LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id) 
    LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) 
WHERE wpostmeta.meta_key = 'customDateField' 
    AND wpostmeta.meta_value >= CURDATE() 
    AND $wpdb->term_taxonomy.taxonomy = 'category' 
    AND $wpdb->term_taxonomy.term_id IN(3) 
ORDER BY wpostmeta.meta_value ASC 
LIMIT 7 
相關問題