MySQL(4.1) MySQL暦1ヶ月
以下のテーブルがあります。
テーブル名 schedule
フィールド date text 他多数
dateにはY-m-d形式で日付を入れています。(2007-03-21)
****実行したい事**********************************
今日より先の日付がdateに入っているレコードを取得したいです。
**************************************************
1)Y-m-d形式での比較
2)タイムスタンプ形式での比較
とりあえず1)をやってみました。
$today = strtotime ("now");
$today2 = date("Y-m-d",$today);
SELECT * FROM schedule WHERE $today2 < 'date'
これだと正常に比較されていません。
Y-m-d形式は比較できないのでしょうか。
2)にチャレンジ
タイムスタンプでの比較が確実だと思うのですが、上記SQLでdateをタイムスタンプ形式に変換して$todayと比較させる書き方がわかりません。
1)でも2)でも正常に比較できればいいです。正確な方法を教えてください。
ちなみにこちらを参考にしています。
http://sandman.s6.xrea.com/nucleus/item-56.html
それではみなさんよろしくお願いします。
$today2に"Y-m-d"形式で日付が入っている場合のSQL
SELECT * FROM schedule WHERE date < $today2;
でどうでしょうか?
$today2に"Y-m-d"形式で日付が入っている場合のSQL
SELECT * FROM schedule WHERE date < $today2;
でどうでしょうか?
先程の私の回答、全体を""で囲めばなんとかなるかも知れませんが、次の方がいいです。
$sql = sprintf( "SELECT * FROM schedule WHERE date < '%s';", $today2 );
また、今日の日付は、current_dateでMySQLから取得できます($today2は、不要)。なので、次でもいいと思います。
$sql = "SELECT * FROM schedule WHERE date < current_date;" ;
※(今実験できないので、)上記でだめなら、
$sql = "SELECT * FROM schedule WHERE date < current_date();" ;
も試してみて下さい。
未来のスケジュールを検索
select * from schedule where cast(date as date)> now()
下のコメント欄の「1週間後」ですができました!ありがとうございます。
日付は、MySQLのdate型を使っていますか?
date型を使うことで、日付演算などをMySQLの機能で簡単に行えます。
また、今日の日付や日時も、MySQLで拾えますけど?
>SELECT * FROM schedule WHERE $today2 < 'date'
列名「date」を、「'」(アポストロフィ)で括ってますよね?
これでは、文字定数として扱われます。
予約語と重なる表名や列名を使う場合は、「`」(バッククォート)で括ります。
表定義例
create table `schedule` (c1 int, c2 int, `date` date);
検索例1
select * from `schedule` where `date`>'2007-03-16'
検索例2
select * from `schedule` where `date`>curdate()
date型を使っているつもりです。
フィールドもdate型にしました。
ただ、フィールド名にdateを使ったのはまずかったですね。予約語?に引っかかるのでしょうか。
それから''で囲むと文字列になってしまう点も勉強になりました。基本的なところをきちんと勉強しなければ先に進めないですね。
$sql = "SELECT * FROM schedule WHERE date < current_date" ;
これでできました!
dateを'date'にしてたのが間違いだったみたいですね。
PHPとMySQLの関数はそれぞれ違うんだ、という事をきちんと認識しなければなりませんね。。
ちょっと混乱していますが一応できました。
毎度ありがとうございます。