Один запрос, чтобы получить последние 7 сообщений из каждой категории в WordPress - PullRequest
2 голосов
/ 15 сентября 2011

Я хочу написать ОДИН пользовательский запрос SQL, чтобы получить последние 7 сообщений из каждой из 6 моих определенных категорий пользовательских типов сообщений.

Я знаю, как запрашивать пользовательские типы сообщений и таксономии,но мои знания SQL ограничены.Я не знаю, как заставить WordPress выдавать мне 7 последних сообщений из каждой из 6 категорий.На самом деле не имеет значения, в каком порядке он возвращается, если контент там есть.

Пример: если у меня есть категории 1, 2, 3, 4, 5, 6, я бы хотел получить7 последних сообщений из каждой из этих категорий.В частности, запрос должен получить 7 последних сообщений для категории 1, 7 последних сообщений для категории 2 и т. Д., Все с одним запросом.

Я не хочу иметь 6 отдельных экземпляров WP_Query, посколькуне эффективен.

1 Ответ

0 голосов
/ 15 сентября 2011

вам нужно использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...