Нужна помощь с MySQL, объединение двух запросов - PullRequest
1 голос
/ 09 февраля 2010

Я использую WordPress, и я хотел бы написать собственный запрос, который бы отображал ежемесячный архив сообщений, основанных на одной определенной категории. Я использовал режим отладки, чтобы узнать, как получить ежемесячный архив на основе всех сообщений, выбрать определенную категорию. Вот вопросы:

Получить ежемесячный архив:

SELECT YEAR(post_date) AS `year`, MONTH (post_date) AS `month`, 
  count(ID) as posts FROM wp_posts  
  WHERE post_type = 'post' AND post_status = 'publish' 
  GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC

Выберите категорию:

SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy
  AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy 
  IN ('category')  AND t.slug = 'blog' ORDER BY t.name ASC

Я не могу понять, как присоединиться к этим двум;) Любая помощь приветствуется!

Спасибо.

Обновление:

Есть еще одна задействованная таблица, называемая term_relationships, так что всего получается 4 таблицы. Вот изображение структуры базы данных WordPress: http://codex.wordpress.org/images/8/83/WP_27_dbsERD.png

В любом случае, вот где я нахожусь:

SELECT t.*, tt.*, YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, 
    count(ID) as posts FROM wp_posts, wp_term_relationships AS tr, 
    wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id 
    WHERE tt.taxonomy IN ('category') AND t.slug = 'blog' 
    AND post_type = 'post' AND post_status = 'publish' 
    AND ID = tr.object_id AND tr.term_taxonomy_id = t.term_id 
    GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC

Я знаю, что это не лучший способ, и поэтому мне нужна ваша помощь;)

Спасибо.

1 Ответ

3 голосов
/ 09 февраля 2010

Как насчет чего-то подобного в качестве основы для объединений и необходимых дополнений where:

    SELECT 
        YEAR(post_date) AS `year`, 
        MONTH (post_date) AS `month`, 
        count(ID) as posts  
    FROM wp_posts 
    INNER JOIN wp_term_relationships wtr ON wp_posts.id = wtr.object_id
    INNER JOIN wp_term_taxonomy wtt ON wtr.term_taxonomy_id = wtt.term_taxonomy_id
    INNER JOIN wp_terms wt ON wtt.term_id = wt.term_id
    WHERE post_type = 'post' AND post_status = 'publish' 
    AND wtt.taxonomy = 'category'
    AND wt.name = 'enter category name here'
    GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...