SQL-запрос относительно дат - PullRequest
0 голосов
/ 26 августа 2011

В моей схеме есть следующее отношение:

Entries:
entryId(PK) auto_inc
date date

Чтобы подсчитать общее количество записей в отношении, я использую запрос в своем php следующим образом:

$sql = mysql_query("SELECT COUNT(*) as Frequency FROM Entries WHERE date = '$date'");

У меня вопрос, как мне посчитать количество записей в ТЕКУЩЕМ месяце ..

Ответы [ 3 ]

1 голос
/ 26 августа 2011

Вы хотите промежуточный запрос на основе вашего столбца даты.

ГДЕ дата МЕЖДУ начальной датой и конечной датой.

Между эквивалентна дате> = начальной дате И дате <= конечной дате.Конечно, было бы также возможно просто использовать> = AND <явно, что немного упростило бы его, потому что вам не нужно находить последний день месяца, а только первый день следующего месяца, используя только DATE_ADD (..., ИНТЕРВАЛ 1 МЕСЯЦ.) </p>

Однако начальная и конечная даты в этом случае будут получены из CURDATE ().

Вы можете использовать CURDATE (), MONTH (), DATE_ADD и STR_TO_DATE дляполучить нужные вам даты (1-й день текущего месяца, последний день текущего месяца).Эта статья решает аналогичную проблему, и все необходимые методы показаны в примерах, которые вы должны быть в состоянии адаптировать:

http://www.gizmola.com/blog/archives/107-Calculate-a-persons-age-in-a-MySQL-query.html

Первый день текущего месяца очевиден ГОД-МЕСЯЦ(CURDATE ()) - 01.Последний день, который вы можете рассчитать с помощью DATE_ADD, чтобы добавить 1 месяц к первому дню текущего месяца, затем DATE_ADD -1 дней.

update- Хорошо, я пошел и сформулировал полный запрос.Не думайте, что str_to_date действительно необходим для получения эффективности индекса, но на самом деле не проверял.

SELECT count(*) 
FROM entries
WHERE `date` BETWEEN 
CONCAT(YEAR(CURDATE()), '-', MONTH(CURDATE()), '-', '01')
AND
DATE_ADD(DATE_ADD(CONCAT(YEAR(CURDATE()), '-', MONTH(CURDATE()), '-', '01'), INTERVAL 1 MONTH), INTERVAL -1 DAY);
0 голосов
/ 26 августа 2011

Попробуйте

 $sql = mysql_query("SELECT COUNT(*) as Frequency FROM Entries WHERE MONTH(date) = MONTH(NOW()) );
0 голосов
/ 26 августа 2011

Попробуйте это

SELECT COUNT(1) AS `Frequency`
FROM `Entries`
WHERE EXTRACT(YEAR_MONTH FROM `date`) = EXTRACT(YEAR_MONTH FROM CURDATE())

См. EXTRACT() и CURDATE()

Редактировать: Изменено NOW() на CURDATE(), как здесь более уместно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...