2012-02-24 2 views
3

Все, что я хочу, чтобы подсчитать записи по дате. (То есть записи с той же датой.) Моя таблицаSql запрос для подсчета же записи даты

enter image description here Вы можете увидеть пятый и шестой вход имеет ту же дату.

Теперь реальная проблема, так как я думаю, что та же самая запись даты имеет разное время, поэтому я не получаю то, что хочу.

Я использую этот SQL

SELECT COUNT(created_at) AS entries, created_at 
FROM wp_frm_items 
WHERE user_id =1 
GROUP BY created_at 
LIMIT 0 , 30 

Что я получаю это.

enter image description here

Я хочу записи как 2 для даты 2012-02-22

+0

Это действительно не PHP вопрос. Вероятно, вы должны удалить этот тег –

+0

Okay удален @RayPerea –

ответ

11

Причина вы получите то, что вы получаете, потому что вы также сравнить время, вплоть до второй части. Таким образом, любые записи, созданные с той же секунды, будут сгруппированы вместе.

Чтобы добиться того, что вы на самом деле хотите, вам нужно применить функцию даты в столбце 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') 
+0

Не могли бы вы рассказать мне больше о том же запросе, но хотите только на текущий месяц –

+0

@AjayPatel: Обновлено – PatrikAkerstrand

+2

О, извините, я должен был быстро. Измененные группы запросов по месяцам, но вы хотите получить первый запрос, но только для текущего месяца? – PatrikAkerstrand

3

Вы должны устранить время с GROUP BY

SELECT COUNT(*) AS entries, created_at 
FROM wp_frm_items 
WHERE user_id =1 
GROUP BY DATE(created_at) 
LIMIT 0 , 30 
+0

Спасибо! простой и гладкий. Это работает для меня –

1

К сожалению, неправильно это.

Использование GROUP BY DATE(created_at)

+0

разве вам не нужно что-то в нем? Я не знакомый с mysql, но я знаю, что в mssql здесь будет использоваться отдельная комбинация с tepart. –

+0

Правильно прочитайте вопрос –

+0

Нет, mysql 'COUNT (*)' подсчитывает количество строк, которые были сгруппированы вместе. – ChrisPatrick

1

Try:

SELECT COUNT(created_at) AS entries, created_at 
FROM wp_frm_items 
WHERE user_id =1 
GROUP BY DATE(created_at) 
LIMIT 0 , 30