Причина, по которой вы получаете то, что вы получаете, в том, что вы также сравниваете время с точностью до секунды. Таким образом, любые записи, созданные в ту же секунду, будут сгруппированы.
Чтобы достичь того, чего вы действительно хотите , вам нужно применить функцию даты к столбцу созданного_атта:
SELECT COUNT(1) AS entries, DATE(created_at) as date
FROM wp_frm_items
WHERE user_id =1
GROUP BY DATE(created_at)
LIMIT 0 , 30
Это удалит часть времени из поля столбца, и, таким образом, сгруппирует все записи, созданные в один и тот же день. Вы можете пойти дальше, удалив часть дня для групповых записей, созданных в том же месяце того же года и т. Д.
Чтобы ограничить запрос записями, созданными в текущем месяце, вы добавляете к запросу WHERE
-классу, чтобы выбрать только те записи, которые удовлетворяют этому условию. Вот пример:
SELECT COUNT(1) AS entries, DATE(created_at) as date
FROM wp_frm_items
WHERE user_id = 1
AND created_at >= DATE_FORMAT(CURDATE(),'%Y-%m-01')
GROUP BY DATE(created_at)
Примечание : COUNT(1)
-часть запроса просто означает Count each row
, и вы могли бы также написать COUNT(*)
, COUNT(id)
или любое другое поле. Исторически наиболее эффективным подходом был подсчет первичного ключа, поскольку он всегда доступен в любом индексе, который может использовать механизм запросов. COUNT(*)
раньше приходилось выходить из индекса и извлекать соответствующую строку в таблице, что иногда было неэффективно. В более современных планировщиках запросов это , вероятно, уже не . COUNT(1)
- еще один вариант, который не заставлял планировщик запросов извлекать строки из таблицы.
Редактировать : Запрос на группировку по месяцам может быть создан различными способами. Вот пример:
SELECT COUNT(1) AS entries, DATE_FORMAT(created_at,'%Y-%c') as month
FROM wp_frm_items
WHERE user_id =1
GROUP BY DATE_FORMAT(created_at,'%Y-%c')