КАК ВЫБРАТЬ * (все), какая дата начинается с последнего дня прошлого месяца до первого дня следующего месяца - PullRequest
1 голос
/ 01 июля 2011

используйте PHP и MySQL и хотите использовать оператор SELECT, который date_post (переменная datetime) начинается с последней даты последнего месяца и датируется первым днем ​​следующего месяца, помогите мне, пожалуйста.заранее.

my database: 'id', 'content', 'image', 'date_post', 

и т. д.и я пытаюсь использовать

$today = getdate();
$thisyear=$today['year'];
$thismon=$today['mon'];
$date_start=$thisyear.'-'.$thismon.'-01';
$date_end=$thisyear.'-'.($thismon+1).'-01';
$sql="SELECT *, DATE_FORMAT(date_post, '%d-%m-%Y') AS datepost
      FROM my_table
      WHERE date_post BETWEEN date('$date_start') 
        AND date('$date_end')
      ORDER BY date_post DESC"; 

Ответы [ 2 ]

1 голос
/ 01 июля 2011

Обеспечение того, что запрос не будет сканировать полную таблицу, но будет использовать индекс date_post (если он есть!):

SELECT * 
FROM myTable
WHERE date_post < LAST_DAY(CURDATE())
                   + INTERVAL 2 DAY
  AND date_Post >= LAST_DAY( LAST_DAY( CURDATE()) - INTERVAL 1 MONTH )

Если он запускается сегодня (2011-07-01), он выдаст все значения времени между 2011-06-31 00:00:00 и 2011-08-01 23:59:59.

1 голос
/ 01 июля 2011

Это делает с одним запросом в MySQL, без какого-либо PHP:

SELECT * FROM `table_name`
WHERE DATE(`date_post`) >= DATE_FORMAT(CURDATE() - INTERVAL 1 MONTH, CONCAT('%Y-%m-', DAY(LAST_DAY(CURDATE() - INTERVAL 1 MONTH))))
AND DATE(`date_post`) <= DATE_FORMAT(CURDATE() + INTERVAL 1 MONTH, '%Y-%m-01');
...