2013-07-08 3 views
0

У меня есть две таблицы:MySQL: месяц Range Регистрация

**users** 
id firstname lastname  
1 John  Mathews 
2 Scott  Mithchell 
.... 
.... 
.... 


**publish** 
id userid  bookid  published 
1 1  1  2013-01-16 14:12:10 
1 2  1  2013-01-08 15:17:40 
1 2  1  2013-01-10 14:18:10 
.... 
.... 
.... 

Мне нужно найти записи каждого пользователя для каждого месяца (январь, февраль, март .... и т.д.) на основе поля «опубликовано». если для этого пользователя нет данных для соответствующего месяца, тогда он должен отображать 0 (нуль). Таким образом, вывод должен выглядеть следующим образом: -

id firstname lastname month  published 
1 John  Mathews  January  1 
1 John  Mathews  february 2 
1 John  Mathews  march  1 
1 John  Mathews  april  1 
1 John  Mathews  may   1 
1 John  Mathews  june  1 
1 John  Mathews  july  0 
1 John  Mathews  august  0 
1 John  Mathews  september 0 
1 John  Mathews  October  0 
1 John  Mathews  November 0 
1 John  Mathews  December 1 
2 Scott  Mitchell January  2 
2 Scott  Mitchell february 2 
2 Scott  Mitchell march  1 
2 Scott  Mitchell april  1 
2 Scott  Mitchell may   1 
2 Scott  Mitchell june  0 
2 Scott  Mitchell july  0 
2 Scott  Mitchell august  1 
2 Scott  Mitchell september 1 
2 Scott  Mitchell October  0 
2 Scott  Mitchell November 0 
2 Scott  Mitchell December 1 

ответ

0

** месяца **

nr | monthName 
---------- 
1 | january 
2 | february 
... 

Тогда:

SELECT p.id, fristname, lastname, m.monthName AS month, count(*) as published 
FROM months m LEFT JOIN publish p ON MONTH(p.published) = m.nr 
JOIN users u ON u.id = p.userid 
GROUP BY p.id, firstname, lastname, month 
ORDER BY ... 
+0

Я также должен включать в себя пустые месяцы в том же запросе. – neeraj

+0

проверить обновление .. – makciook

+0

Можем ли мы создать диапазон месяцев во время выполнения вместо создания отдельной таблицы? – neeraj

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