• ベストアンサー

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"); で登録したいと考えております。 お忙しい中恐縮ですが、ご指導いただければ幸いです。

  • 32aoi
  • お礼率100% (7/7)
  • PHP
  • 回答数4
  • ありがとう数4

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

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

DATETIMEフィールドをベースに同じ日は上書きですか・・・ それならまずINSERT INTOでその日付けがない場合はインサートして UPDATEで更新をかければよいでしょう。 (ない場合は追加で、ある場合は更新であれば、更新は常にかけてよいので) ちなみにDATETIME型から日付けをとるならTO_DAYS()あたりでどうですか? http://dev.mysql.com/doc/refman/4.1/ja/date-and-time-functions.html

32aoi
質問者

お礼

yambejp様 こんにちは。引き続き、お忙しい中ご親切なアドバイスを有難う御座います。 お返事が遅くなってしまいましたが、yambejp様のアドバイスにより、TO_DAYS()を用いることで描いている結果を得ることが出来ました。 当初、TO_DAYS()の設置方法に戸惑いもありましたが、無事、結果を得ることが出来たのもyambejp様のアドバイスからのものと感謝しております。有難う御座いました。

その他の回答 (3)

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.3

DATE()でうまく出来ないならば、ごり押し技として substring(`日付時間のカラム`,1,10) ってことでなんとか回避するとか?

32aoi
質問者

お礼

inu2様 はじめまして、こんにちは。 ご親切なアドバイスを有難う御座いました。 当初、私もinu2様が仰るように、データの文字を抽出して分別しようと考えていましたが、TO_DAYS(NOW())にて無事描いている結果を得ることが出来ました。 お忙しいなかアドバイスを有難う御座いました。

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

$sql = "insert into hoge set (`datetime`=now())"; datetimeタイプのフィールドであればnow()を代入すればよいでしょう。 もしくは timestampタイプのフィールドにしておいてnullを代入する手もあります。 timestampは通常のdatetimeとは書式が違うので注意ください

32aoi
質問者

お礼

yambejp様 はじめまして、こんばんは。早速のアドバイスを有難う御座います。 『謝った説明だったかと思われますが、今回お教えいただきたいのは、 $date = date("Y-m-d H:i:s"); にてDBに登録したデータを参照する際、同じ日付のときは上書き、というスクリプトを考えているのですが、時刻まで登録していることで、単純に参照・比較できずに居る次第です。』 以上は、先に追加説明?として記載させていただきましたが、このような場合、datetime ではなく、timestampの利用の方が適切なのでしょうか?それとも、登録済みのデータを参照する際、日付と時間を分割して比較するという形になるのでしょうか? お恥ずかしい質問かと思われますが、引き続きご指導いただければ幸いに思います。お忙しい中恐縮ですが宜しくお願い申し上げます。

回答No.1

DATE関数を使うといいんじゃないですかね? WHERE DATE(date) = '2007-09-05' とか。

32aoi
質問者

お礼

mizuno3様 はじめまして、こんばんは。早速のアドバイスを有難う御座います。 アドバイスをいただき、先ほどからDATE関数に関して調べてながらテストしておりますが、上手く認識させることが出来ません。 謝った説明だったかと思われますが、今回お教えいただきたいのは、 $date = date("Y-m-d H:i:s"); にてDBに登録したデータを参照する際、同じ日付のときは上書き、というスクリプトを考えているのですが、時刻まで登録していることで、単純に参照・比較できずに居る次第です。 以上、引き続きご指導いただければ幸いです。

関連するQ&A

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

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

    • ベストアンサー
    • PHP
  • datetime型、未入力時の日時表示について

    PHP&MySQL初心者です。 同窓会の申し込みフォーム作成していますが、日時表示について質問です。 参加希望日時をカレンダー入力させて、データベースに登録しています。 日時はカラムを分けずにまとめてdatetime型にしています。 ■第一希望 [カレンダー入力](年月日時分をまとめて) ■第二希望 [カレンダー入力](年月日時分をまとめて) →データベース(mySQL)には、 datetime型「2016-01-05 02:50:00」形式で登録。 カレンダー入力せずにINSERTされたとき、datetime型だと、 「0000-00-00 00:00:00」で登録されますが、 この値を、date('Y年n月j日 g時i分', strtotime(カラム値)); で読み出すと、「1970 年 1 月 1 日 00:00:00」と表示されます。 このままではまずいので、単純に空欄としたいのです。 カレンダー入力されなかったとき、つまり、「0000-00-00 00:00:00」で登録されているとき、 日時表示を空欄にするスマートな方法はありますか?

    • ベストアンサー
    • PHP
  • 検索条件の日付の型

    お力を貸してください。 データベースから現在年月日のものだけ抽出したいのですが、 日付の型が合わないからなのか、抽出できません。 dt_fromカラムには表示開始日時 dt_toカラムには表示終了日時が入ってます。 $from = date('Y-m-d 00:00:00'); $to = date('Y-m-d 23:59:59'); $sql = "SELECT * FROM data WHERE dt_from = $from AND dt_to = $to "; どこかおかしい点があればご指摘ください。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • 日付フォーマット

    テーブルから日付データを取得してフォーマットしたいのですがうまくいきません。 DATETIME型の項目に入っている日時(Y-m-d H:i:s)を取得してY/m/dにフォーマットしようと $result = date("Y/m/d", $getdata); としたところ、結果が 1970/01/01 となってしまいました。 $getdataには存在する日時(Y-m-d H:i:s)が入っている事を確認しています 正しくフォーマットするにはどうしたら良いのでしょうか?

    • ベストアンサー
    • PHP
  • 時間の取得

    phpにてデータの登録,更新を行うフォームを作りました。 mysqlは以下のsql文(抜粋)を rgist_date datetime NOT NULL default '0000-00-00 00:00:00', up_date datetime NOT NULL default '0000-00-00 00:00:00', としphpmyadminからインポートしています。 現状はphp側にて登録時間を // 登録時間 $regist_date =date("Y-m-d H:i:s"); // 更新時間 $up_date =date("Y-m-d H:i:s"); のように登録であればregist_dateをinsertするというような 形式なのですがmysql側にて時間を取得できないものかと思い 調べてみたのですがなかなか情報がみつからず質問させて 頂きました。 このようなことはやはりphp側でやるものなのでしょうか? 宜しくお願い致します。

  • datetime型の日付検索について

    宜しくお願いします。 datetime型のカラムに収められたデータから日付のみの検索方法が分かりません。 例えば、2005-12-25 10:20:30/2005-12-25 10:25:35 という様に、同じ日付ですが、時間が違う場合に、日付だけで検索する方法がわかりません。 どなたかご指導の程、宜しくお願い致します。 尚、MySQLのバージョンは、4.1.12です。

    • ベストアンサー
    • MySQL
  • 日付や日時を格納する場合の型はどうしていますか?

    WEBアプリケーションで データベース(MySQL)を使うのですが、 日付や日時を格納する場合の型は varchar(10)、date、datetime のどれにしていますか? 文字型と日付型か迷っているので、 メリット、デメリットがあれば知りたいです。

    • ベストアンサー
    • MySQL
  • mysqlでdate型のカラムに今日から1年分の日付を挿入するSQLは

    mysqlでdate型のカラムに今日から1年分の日付を挿入するSQLは書けますでしょうか ・テーブル  T_TEMP ・カラム  M_DATE (DATE型) ・SQL  insert into T_TEMP (select ???); 以上、よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • PHPで取得した日時データをDBに挿入する方法

    こんにちは。 以下のようにMariaDBのコマンドで「sysdate()」を使用して日時を入力しているのですが、PHPで同様のことができずに困っています。 ご教示頂けませんか。 宜しくお願い致します。 【MariaDB】 MariaDB [tweet01]> insert tweet_tbl(account, contents, input_datetime) values('account01', 'contents01', sysdate()); MariaDB [tweet01]> select * from tweet_tbl; +----+-----------+------------+---------------------+ | id | account | contents | input_datetime | +----+-----------+------------+---------------------+ | 6 | account01 | contents01 | 2016-04-19 00:24:36 | +----+-----------+------------+---------------------+ 【PHP】 $account = $_REQUEST['account']; $contents = $_REQUEST['contents']; $input_datetime = "echo date( "Y-m-d H:i:s" )"; $result = mysqli_query($con, "insert into tweet_tbl(`account`, `contents`, `input_datetime`) values('$account', '$contents', '$input_datetime')"); 以下の行をうまく修正できれば解決しそうな気がしているのですが… $input_datetime = "echo date( "Y-m-d H:i:s" )";

    • ベストアンサー
    • PHP
  • MySQLのDateTimeにPHPで値セットは?

    初歩的な質問ですみません。 MySQLにとあるテーブルがあって、 その中に 更新日時 という DATETIME 型のフィールドがあるのですが、 insert でレコードを追加する際にそこに現在日時をセットしようとして、 恥ずかしながらその方法がわかりません。 $sql = sprintf('INSERT INTO %s SET %s="%s", %s="%s"',         'tmp',         'mailAddr', e($mailAddr),         'update', date('Y/m/d H:i:s')); mysql_query($sql); とか、 $sql = sprintf('INSERT INTO %s SET %s="%s", %s=cast(now() as datetime)',         'tmp',         'mailAddr', e($mailAddr),         'update'); mysql_query($sql); とか、いろいろ調べて試してみたんですけど...。 上記のように、insert into xxx set~ を使う場合を知りたいです。 すみません。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう