2010-07-19 3 views
1

Мне нужно запустить запрос в Wordpress, чтобы узнать, сколько сообщений есть в месяц, включая нули.Количество сообщений в Wordpress в месяц

Мой запрос прямо сейчас возвращает первую часть того, что я пытаюсь вернуться:

select 
distinct date_format(post_date, '%y') "year", 
date_format(post_date, '%b') "month", 
from wp_posts 
where post_type = 'post' 
and post_status = 'publish' 
group by date_format(post_date, '%y'), date_format(post_date, '%b') 
order by date_format(post_date, '%y') desc, post_date 

возвращает что-то вроде:

| year | month | count | 
------------------------------------ 
| 10  | Jan  |  4  | 
| 10  | Feb  |  2  | 
| 10  | Mar  |  1  | 
| 10  | Apr  |  6  | 
| 09  | Jan  |  4  | 
| 09  | Feb  |  2  | 

мне нужно вернуть что-то вроде:

| year | month | count | 
------------------------------------ 
| 10  | Jan  |  4  | 
| 10  | Feb  |  2  | 
| 10  | Mar  |  1  | 
| 10  | Apr  |  6  | 
| 10  | May  |  0  | 
| 10  | Jun  |  0  | 
| 10  | Jul  |  0  | 
| 10  | Aug  |  0  | 
| 10  | Sep  |  0  | 
| 10  | Oct  |  0  | 
| 10  | Nov  |  0  | 
| 10  | Dec  |  0  | 
| 09  | Jan  |  4  | 
| 09  | Feb  |  2  | 
| 09  | Mar  |  0  | 
| 09  | Apr  |  0  | 
| 09  | May  |  0  | 
| 09  | Jun  |  0  | 
| 09  | Jul  |  0  | 
| 09  | Aug  |  0  | 
| 09  | Sep  |  0  | 
| 09  | Oct  |  0  | 
| 09  | Nov  |  0  | 
| 09  | Dec  |  0  | 

Я бы использовал rownum в Oracle, но я не могу понять запрос с использованием синтаксиса MySQL. Любая помощь приветствуется.

ответ

5

Это требует номера таблицы трюк -

  1. Создать таблицу с именем ЧИСЛА:

    DROP TABLE IF EXISTS `example`.`numbers`; 
    CREATE TABLE `example`.`numbers` (
        `id` int(10) unsigned NOT NULL auto_increment, 
        PRIMARY KEY (`id`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
    
  2. Заполняем таблицу, выполнив следующие по крайней мере, два десятка раз:

    INSERT INTO NUMBERS (id) VALUES (NULL) 
    

Это позволит сформировать список дат с помощью:

SELECT DATE(DATE_ADD('2009-01-01', INTERVAL n.id MONTH)) AS dt 
    FROM NUMBERS n 

Теперь вы можете присоединиться оставили свой текущий запрос к списку дат:

SELECT DATE_FORMAT(x.dt, '%y') "year", 
      DATE_FORMAT(x.dt, '%b') "month", 
      COUNT(*) AS count 
    FROM (SELECT DATE_ADD('2009-01-01', INTERVAL n.id MONTH) AS dt 
      FROM NUMBERS n) x 
LEFT JOIN WP_POSTS wp ON MONTH(wp.post_date) = MONTH(x.dt) 
        AND YEAR(wp.post_date) = YEAR(x.dt) 
        AND wp.post_type = 'post' 
        AND wp.post_status = 'publish' 
    WHERE YEAR(x.dt) IN (2009, 2010) 
GROUP BY DATE_FORMAT(x.dt, '%y'), DATE_FORMAT(x.dt, '%b') 
ORDER BY DATE_FORMAT(x.dt, '%y') DESC, MONTH(x.dt) 
+1

Почти тот же ответ ... С уважением является аккуратный, я удалю мой :) +1 –

Смежные вопросы