こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

MySQLのDATE型と年の比較

こんにちは。
PHPとMySQLでレポートの作成・管理をしようとしています。
新規登録の画面でレポートの日付をDATE型で登録しています。
一覧で表示をさすのに、
デフォルトで登録日が今年のものだけを表示したいのですが、出来ません・・・
SQL文は

$time = mktime();
$time = date("Y-m-j", $time);
$sql = "SELECT * FROM t_repo WHERE re11 >= " .$time. " ORDER BY re11";

としています。
しかし全てのレポートが出てしまいます・・・
なんとかこれを今年のレポートだけが表示され、
【前年へ】・【次年へ】のボタンがおせば、現在表示されている前の年・次の年のレポートが表示されるようにしたいのですが、ここからどうしたらいいのでしょうか?
すみませんが、ご教授の程をよろしくお願いします。

投稿日時 - 2005-04-04 13:23:28

QNo.1310678

困ってます

質問者が選んだベストアンサー

> このままだとちゃんと検索されませんでした。

ごめんなさい、コピペミスです。

> こんな場合はmktimeでこんば場合はgetdateの方が良いみたいなのがあるんですか?日付関数を初めて使ったので使い方がイマイチわからないんです・・・

いや、私もあまり詳しくは分かりませんが、マニュアルに、

与えられた引数に従って UNIX のタイムスタンプを返します。 このタイムスタンプは、Unix epoch(1970年1月1日)から 指定された時刻までの通算秒を表す長整数です。

Windows: 負の値のタイムスタンプはWindowsのどのバージョンにおいてもサポートされていません。 したがって、年の有効範囲は1970年から2038年の間のみです。

と書かれているし、コーディング量も少ないかなってことで日付系はgetdateを使ってます。

適当で申し訳ないですが、こんな感じで。

投稿日時 - 2005-04-08 10:09:43

ANo.4

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

$time = date("Y-m-j", $time);

だと、2005-04-4 となるはずです。

いけたということは、re11 には 2004、2005 というデータが入っているということですね。

これくらいであれば、mktime使うよりgetdateの方が良いのではないですか。
こんな感じで。
$today = getdate();
$sql = "SELECT * FROM t_repo WHERE re11 >= " .$today[year]. " ORDER BY re11";

投稿日時 - 2005-04-04 17:45:08

お礼

何度もありがとうございます。
$today = getdate();
$sql = "SELECT * FROM t_repo WHERE re11 >= " .$today[year]. " ORDER BY re11";
ですが、
このままだとちゃんと検索されませんでした。
$today = getdate();
$sql = "SELECT * FROM t_repo WHERE date_format(re11, '%Y-%m-%e') >= " .$today[year]. " ORDER BY re11";

とWHEREのre11もdate_formatするとできました・・・。
getdate関数のこんな使い方があるんですね。勉強になりました。
ついでで申し訳ございませんが、
こんな場合はmktimeでこんば場合はgetdateの方が良いみたいなのがあるんですか?日付関数を初めて使ったので使い方がイマイチわからないんです・・・

投稿日時 - 2005-04-05 11:55:59

ANo.2

$timeにはどのような値が入ることを想定していますか?

実際に何が入っていますか。

補足ください。

投稿日時 - 2005-04-04 15:57:15

お礼

$timeには初めは今年の年が
【前年へ】・【次年へ】のリンクをおされたら、
前の年の値・次の年の値が入るようにしようとしています。。
そこでよく考えたら
$time = mktime();
$time = date("Y-m-j", $time);
だと日付まで入ってしまいますよね???
$time = date(Y, $time);としたらいけました・・・。
難しいですね・・・。
ありがとうございました。

投稿日時 - 2005-04-04 16:52:12

ANo.1

MySQLのバージョンが分かりませんが、

$sql = "SELECT * FROM t_repo WHERE date_format(re11, '%Y-%m-%e') >= " .$time. " ORDER BY re11";

これでどうですか?

投稿日時 - 2005-04-04 13:44:53

お礼

なるほどdate_formatを使うのですね・・・。
でも残念ながら同じでした・・・
バージョンは
OS FreeBSD 5.3-RELEASE

MySQL 4.0.24
PHP 4.3.10
です。

投稿日時 - 2005-04-04 14:30:25

あなたにオススメの質問