- ベストアンサー
DB登録に関する日付の認識
はじめまして、こんばんは。分からないことがあり質問させていただきます。 現在、PHPにてMySQLへアクセスログを登録するものを作成しており、同じ日付に複数訪れた人は、最終日時。はじめて訪れた人はその日時を登録したいのですが、登録(または更新)する際、データベースに設定のdateカラム(datetime)を参照したとき、同じ日付をどう判別するのか?が分かりません。 以上のことから、これまで年月日のみをdateカラムに登録していたのですが、時間も登録したく考え、改め見直しているのですが、時間までをも登録した場合の日付の判別が分からないのです。 お恥ずかしいとは思うものの、現在の登録スクリプトは、 $y = date("Y"); $m = date("m"); $d = date("d"); $date = $y.$m.$d; $sql = "insert................ それを、 $date = date("Y-m-d H:i:s"); で登録したいと考えております。 お忙しい中恐縮ですが、ご指導いただければ幸いです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
DATETIMEフィールドをベースに同じ日は上書きですか・・・ それならまずINSERT INTOでその日付けがない場合はインサートして UPDATEで更新をかければよいでしょう。 (ない場合は追加で、ある場合は更新であれば、更新は常にかけてよいので) ちなみにDATETIME型から日付けをとるならTO_DAYS()あたりでどうですか? http://dev.mysql.com/doc/refman/4.1/ja/date-and-time-functions.html
その他の回答 (3)
- inu2
- ベストアンサー率33% (1229/3720)
DATE()でうまく出来ないならば、ごり押し技として substring(`日付時間のカラム`,1,10) ってことでなんとか回避するとか?
お礼
inu2様 はじめまして、こんにちは。 ご親切なアドバイスを有難う御座いました。 当初、私もinu2様が仰るように、データの文字を抽出して分別しようと考えていましたが、TO_DAYS(NOW())にて無事描いている結果を得ることが出来ました。 お忙しいなかアドバイスを有難う御座いました。
- yambejp
- ベストアンサー率51% (3827/7415)
$sql = "insert into hoge set (`datetime`=now())"; datetimeタイプのフィールドであればnow()を代入すればよいでしょう。 もしくは timestampタイプのフィールドにしておいてnullを代入する手もあります。 timestampは通常のdatetimeとは書式が違うので注意ください
お礼
yambejp様 はじめまして、こんばんは。早速のアドバイスを有難う御座います。 『謝った説明だったかと思われますが、今回お教えいただきたいのは、 $date = date("Y-m-d H:i:s"); にてDBに登録したデータを参照する際、同じ日付のときは上書き、というスクリプトを考えているのですが、時刻まで登録していることで、単純に参照・比較できずに居る次第です。』 以上は、先に追加説明?として記載させていただきましたが、このような場合、datetime ではなく、timestampの利用の方が適切なのでしょうか?それとも、登録済みのデータを参照する際、日付と時間を分割して比較するという形になるのでしょうか? お恥ずかしい質問かと思われますが、引き続きご指導いただければ幸いに思います。お忙しい中恐縮ですが宜しくお願い申し上げます。
- みずの(@mizuno3)
- ベストアンサー率73% (192/263)
DATE関数を使うといいんじゃないですかね? WHERE DATE(date) = '2007-09-05' とか。
お礼
mizuno3様 はじめまして、こんばんは。早速のアドバイスを有難う御座います。 アドバイスをいただき、先ほどからDATE関数に関して調べてながらテストしておりますが、上手く認識させることが出来ません。 謝った説明だったかと思われますが、今回お教えいただきたいのは、 $date = date("Y-m-d H:i:s"); にてDBに登録したデータを参照する際、同じ日付のときは上書き、というスクリプトを考えているのですが、時刻まで登録していることで、単純に参照・比較できずに居る次第です。 以上、引き続きご指導いただければ幸いです。
お礼
yambejp様 こんにちは。引き続き、お忙しい中ご親切なアドバイスを有難う御座います。 お返事が遅くなってしまいましたが、yambejp様のアドバイスにより、TO_DAYS()を用いることで描いている結果を得ることが出来ました。 当初、TO_DAYS()の設置方法に戸惑いもありましたが、無事、結果を得ることが出来たのもyambejp様のアドバイスからのものと感謝しております。有難う御座いました。