Выбор строк на основе временного интервала

Левые говорят, что у меня есть стол -> comments

id| comment | thread_id |         time       |
1    xyz        1         2013-1-10 19:21:17
2    xyz        1         2013-1-11 19:21:17
3    xyz        2         2013-1-14 19:21:17
4    xyz        2         2013-2-10 19:21:17
5    xyz        1         2013-2-10 19:21:17
6    xyz        1         2013-2-10 19:21:17
7    xyz        1         2013-2-10 19:21:17
8    xyz        1         2013-4-10 19:21:17
9    xyz        1         2013-4-10 19:21:17
10   xyz        1         2013-6-10 19:21:17

Теперь я хочу получить всего Нет комментариев COUNT() в частности thread_id в интервал каждого месяца

Так что у меня есть массив что-то вроде этого ->
(если мы возьмем thread_id = 1)

$total[0] => 2
$total[1] => 6
$total[2] => 6
$total[3] => 8
$total[4] => 8
$total[5] => 9

…и так до $ total [11] => 9

Я смогу сделать это с помощью 12 запросов в месяц, но это не слишком хорошо.

Кто-нибудь может сделать это с помощью одного запроса?

0

Решение

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

-- just an example
SELECT
*
FROM (
select 1  as th union all
select 2  as th union all
select 3  as th union all
select 4  as th union all
select 5  as th union all
select 6  as th union all
select 7  as th union all
select 8  as th union all
select 9  as th union all
select 10 as th union all
select 11 as th union all
select 12
) mon
LEFT JOIN (
SELECT
MONTH(time)      AS Month
, COUNT(thread_id) AS No_of_Comment
FROM comments
GROUP BY
MONTH(time)
) dat
ON mon.th = dat.month
0

Другие решения

Да, вы можете сделать это с помощью оператора group by:

Вот Sql для этого: —

Select month(time) as Month, COUNT(thread_id) as No_of_Comment from comments group by month(time)
0

По вопросам рекламы [email protected]