Причина вы получите то, что вы получаете, потому что вы также сравнить время, вплоть до второй части. Таким образом, любые записи, созданные с той же секунды, будут сгруппированы вместе.
Чтобы добиться того, что вы на самом деле хотите, вам нужно применить функцию даты в столбце created_at:
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
-clause к запросу только выберите записи, удовлетворяющие этому условию. Вот пример:
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')
Это действительно не PHP вопрос. Вероятно, вы должны удалить этот тег –
Okay удален @RayPerea –