2011-07-01 12 views
1

PHPとMySQLを使用し、date_post(datetime変数)が最後の最後の日付から始まるSELECTステートメントを使用したい今月から来月初日まで、私を助けてください。前月の最終日から翌月の初日までの日付*(すべて)

ありがとうございます。

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

などが、私は任意のPHPなしで、

$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"; 
+1

データベーススキーマと、試した既存のSQLについての詳細を記載してください。 –

+0

私のデータベース: '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 = "日付*日付( '$ date_start')と日付( '$ date_end')の間のdate_post場所 からの からの どこからのdate_post ORDER BY date_post DESC "; –

答えて

1

それはMySQLの内の1つのクエリとなすを使用しよう:

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'); 
+0

to garvey:ありがとうございますが、エラーを返します:警告:mysql_result():指定された引数はMySQLの有効なリソースではありません。 –

+0

@AJ OP、Hmmm。私はdbmysqlforgeでそれをテストしました。このクエリを呼び出すと、あなたのPHPコードを取得できますか? MySQlのどのバージョンを使用していますか? – pltvs

+0

私はこれを使用しようとしています(それは仕事です) - 単一のqoutesフォームをdate_postに移動してください、ありがとうございます。 INTERVAL 1 MONTH、CONCAT( '%Y-%M-'、DAY(LAST_DAY( - DATE(date_post)> = DATE_FORMAT(CURDATE()$ SQL = "SELECT * FROMエントリ \t \t \t \t \t \t \t \t \t AND DATE(date_post)<= DATE_FORMAT(CURDATE()+ INTERVAL 1 MONTH、 '%Y-%m-01') "; –

1

クエリはテーブル全体をスキャンしないことを保証します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:002011-08-01 23:59:59の間のすべての日付時刻が与えられます。

関連する問題