• ベストアンサー

DBにあるdate型の日付に関して

お世話になっております。 MySQLへ登録されているdate型の日付($date = date("y-m-d");で登録)があるのですが、本日の日付と照らし合わせた際、1年以内であれば可。過ぎていれば不可。のようなスクリプトをif文を用いて...と考えているのですが、どういった関数が適しているのでしょうか? お恥ずかしい限りでは御座いますが、色々調べているものの、どれが適した関数かさえ分からず、ヒントだけでもご教授願えればと思っております。 お忙しい中恐縮ですが、宜しくお願い致します。 動作環境 php4.3 MySQL4.0

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

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.3

1年以内に登録したデータを取得する、でいいんですよね・・・? $date = date('Y-m-d', mktime(0, 0, 0, date('m'), date('d'), date('Y')-1)); $sql = "select * from test_tb where tourokubi >= '$date'"; $result = mysql_query($sql); でダメですか? 全件取得してからifで判定、などという事はしません。

sadacha
質問者

お礼

tany180sx様 こんばんは。早速のご回答を有難う御座います。 ごめんなさい。またまた説明不足だったようです(汗)。 例えで言うと、データを取得した際、データ登録から1年以内であれば、登録データの「表示」。1年以上経っていたら、「期限超過」の表示。データそのものが無かったら、「登録データがない旨を表示」。と、このような流れを考えています。 本当、言葉足らずですみません。 初心者の私として、今回のtany180sx様からのアドバイスは、今後の幅が広がったと感謝しているところですが、今一度、上記の流れに関してアドバイス頂ければ幸いです。 これまでのアドバイスにもヒントがあるようで、色々と試してはいるものの、上手く行く事が出来ずにおりまして・・・宜しくお願い致します。

sadacha
質問者

補足

tany180sx様 こんばんは。補足欄から失礼いたします。 ない頭を使いつつ、なんとか目的の動作をさせることに成功しました。 ご親切なアドバイスに感謝しております。とても貴重なヒントとなりました。 今後とも宜しくお願い致します。有難う御座いました。

その他の回答 (2)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

日付をPHPで統一しているかDBで統一しているかにもよりますが、 PHPなら $date = date('Y-m-d', strtotime(date('Y-m-d') . '- 1 year')); $date = date('Y-m-d', mktime(0, 0, 0, date('m'), date('d'), date('Y')-1));

sadacha
質問者

お礼

tany180sx様 こんにちは。お世話になっております。#1のyambejp様同様、ご親切なアドバイスに感謝しております。 ところで、yambejp様へのご挨拶でも述べたのですが、tany180sx様からアドバイスいただいた関数を用いても上手く行かず、自分の記述ミスなのか、tany180sx様もご指摘のように、不適切なものなのか?が分からず戸惑っております。 これも勉強不足が故とは思っておりますが、今一度ご指導頂けたら幸いです。

sadacha
質問者

補足

すみません。肝心なことをお伝えするのを忘れてしまいました。 DBへデータを登録する際のコード mysql_connect('localhost','root','******'); mysql_select_db('test'); $hiduke = date("y-m-d"); $sql = "insert into test_tb values(0, '$hiduke', ……);//DBのフィールド名は、tourokubi mysql_query($sql); で、登録したdateをPHPで呼び出す際、現在の日付と比較したいと考えています。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>本日の日付と照らし合わせた際、1年以内であれば可。 >過ぎていれば不可。のようなスクリプトをif文を用いて >...と考えている 可・不可という言い方がよくわかりません。 それはデータを登録しないというとでしょうか? それを実現するスクリプトとは外部言語のことをいっていますか? それともSQLでやりたいのですか? あるフィールドが今日より一年以内の場合に表示する (過去一年分のデータを表示する)なら SELECT * FROM `テーブル` WHERE `dateフィールド`>subdate(curdate() , interval 1 year)

sadacha
質問者

お礼

yambejp様 こんにちは。お世話になっております。 親切な回答を有難う御座います。 私の質問、説明不足でした。 DBへ保存する際、下記のようなスクリプトで保存しているのですが、PHPにてブラウザから登録データを表示させるとき、登録日から1年以上(もしくは1ヶ月以上、10日以上)経過しているデータは、非表示にするようなコードを考えておりました。 なので、if文を用いてコードを書くとしたら,,,,,と、考えておりました。 今回、アドバイスいただいたコードを見て「なるほど,,,」とは思ったもの、上手く行かず、単に記述したコードが可笑しいのか?それともyambejp様がご指摘のように不適切なものなのか?が正直分からなくなってしまいました。引き続きアドバイスなど頂けたら幸いです。

関連するQ&A