MySQL Select And Count Date Range: не работает, преодолевая месячный барьер - PullRequest
0 голосов
/ 29 октября 2010

Подскажите, пожалуйста, почему это работает:

$customer_data_date14daysAgo = mysql_query("SELECT COUNT(*) AS count 
FROM tableName WHERE datetime BETWEEN '$date14daysAgo%' and 
'$dateToday%' ") or die(mysql_error()); 

Но это не так?

$customer_data_date30daysAgo = mysql_query("SELECT COUNT(*) AS count 
FROM tableName WHERE datetime BETWEEN '$date30daysAgo%' and 
'$dateToday%' ") or die(mysql_error());

PHP:

$dateToday = date ( 'Y-M-d', strtotime ( '-0 day' . $date ) );   
$date14daysAgo = date ( 'Y-M-d', strtotime ( '-14 day' . $date ) );   
$date30daysAgo = date ( 'Y-M-d', strtotime ( '-1 month' . $date ) );   

$ dateToday = 2010-Oct-28
$ date14daysAgo = 2010-октябрь-21
$ date30daysAgo = 2010-Sep-28

Единственное отличие состоит в том, что второй запрос охватывает барьер сентябрь - октябрь.

Если я установлю дату вручную на 2010-окт-01 до сегодняшнего дня - это сработает Но если его 2010-сент-30 до сегодняшнего дня - он перестает работать

Спасибо!

Ответы [ 3 ]

1 голос
/ 18 декабря 2010

MySQL не любит, когда им дают даты с названиями месяцев (например, "2010-Oct-28"). рекомендуемый формат имеет все числовые значения: 2010-10-28.

Поэтому, когда вы вызываете функцию php date , запросите ее в следующем формате:

$dateToday = date ( 'Y-m-d', strtotime ( '-0 day' . $date ) );   
$date14daysAgo = date ( 'Y-m-d', strtotime ( '-14 day' . $date ) );   
$date30daysAgo = date ( 'Y-m-d', strtotime ( '-1 month' . $date ) ); 

Это даст следующие строки:
$ dateToday = 2010-10-28
$ date14daysAgo = 2010-10-21
$ date30daysAgo = 2010-10-28

И это должно улучшить работу вашего SQL.

1 голос
/ 29 октября 2010

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

SELECT COUNT(*) AS count FROM table 
WHERE date BETWEEN DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH) AND CURRENT_DATE()

и если вы хотите показать 1 месяц назад (текущая дата не включена), вы можете использовать:

SELECT COUNT(*) AS count FROM table 
WHERE date <= DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH)

, но если я не пойму неправильно.


, следуя вашему вопросу, попробуйте как:

$customer_data_date30daysAgo = mysql_query("SELECT COUNT(*) AS count 
FROM tableName WHERE datetime BETWEEN '".$date30daysAgo."%' and 
'".$dateToday."%' ") or die(mysql_error());
0 голосов
/ 18 декабря 2010

только что написал статью, как работать с датами.он также включает примеры кода для MySQL:

http://use -the-index-luke.com / sql / where-clause / obfuscation / date

...