TIMESTAMPについて

このQ&Aのポイント
  • MySQLを用いて会員管理システムを構築しており、仮登録者の本人確認が取れた時点で、本登録者テーブルへデータをコピーする際、本登録日時を計算する方法が分からない。
  • 現在のSQL文では、仮登録者テーブルのデータを本登録者テーブルへコピーするだけで、本登録日時を計算する機能は備わっていない。
  • 質問者は、仮登録日時と本登録操作日時を合算して本登録日時を計算し、WHERE句で実行できるのか、または別の方法があるのかを知りたい。
回答を見る
  • ベストアンサー

TIMESTAMPについて

MySQLを用いて会員管理システムを構築しております。 仮登録者テーブルと本登録者テーブルの二つを用意しており、 仮登録者の本人確認が取れた時点で、本登録者テーブルへ データを丸々コピーする仕様にしております。 この際に、仮登録日時をTIMESTAMPを用いて日時を取得していますが、 本登録者テーブルへデータをコピーするタイミングで、【 本登録日時 】を 計算させるSQL文等をどの様に記述すればいいのかが分かりません。 現在は、この様なSQL文にしております。 ---------------------------------------------------------------------- $sql = "INSERT INTO user_table SELECT * FROM user_table_2 WHERE (number = ".intval($number).");"; ---------------------------------------------------------------------- user_table_2( 仮登録者テーブル )のデータをuser_table( 本登録者テーブル )へ コピーします。 【 仮登録の日時 】+【 本登録操作を行った日時 】=【 本登録日時 】という計算を WHERE句で実行出来るものなのでしょうか? それとも他に別の方法がありましたら、何卒ご教授いただきたく存じます。 各スペックは以下の通りです。 ---------------------------------- PHP 5.1.6 MySQL 5.0.77 サーバOS Linux ---------------------------------- どうぞよろしくお願いいたします。

  • PHP
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
  • zionic
  • ベストアンサー率39% (31/79)
回答No.3

>selectとinsertを二つに分けるという形を取るのであれば、現在の構文を応用させるのではなく、 >テーブルのコピー時の【 INSERT INTO 】と【 SELECT * FROM 】を独立させるという事なのでしょうか? そのつもりで、書いていたんですが、分けなくてもいいのかな?と今頃思いました。 すこし、文が長くなってしまうかもしれませんが「INSERT INTO TBL_USER SELECT 項目1, 項目2, ...」といった感じで、本登録以外は項目を指定して、本登録の項目のところだけnow()とかしてみたらどうでしょうか?

nazal2010
質問者

お礼

度々ご回答をいただき、誠にありがとうございます。 >「INSERT INTO TBL_USER SELECT 項目1, 項目2, ...」といった感じで なるほど、了解いたしました。 この様な感じでSQL文を書けばいいのですね。 頑張って構築していこと思います。 この度は、ご親切にどうもありがとうございました。

その他の回答 (2)

  • zionic
  • ベストアンサー率39% (31/79)
回答No.2

SelectとInsertを二つに分けるっての方法はだめなんですか? Insert前に仮登録テーブルから必要な項目だけ取得しておいて、 「本登録日時」項目だけnow()にするとか。

nazal2010
質問者

お礼

ご回答をいただき、大変感謝いたします。 >SelectとInsertを二つに分けるっての方法はだめなんですか? 現在、この様な構文になっております。 ---------------------------------------------------------------- // 本登録するデータを取得する if (count($_POST) > 0) { $number = $_POST["number"]; // データが送信されたときはデータを本登録する if (strlen($_POST["number"]) > 0) { // データを本登録する $sql = "INSERT INTO user_table SELECT * FROM user_table_2 WHERE (number = ".intval($number).");"; mysql_query($sql, $conn) or die("<font color=red>このユーザは、既に本登録されています。</font>"); print "<font color=red>number【 $number 】を本登録テーブルへコピーしました。</font><br><br>\n"; } } // データを取り出す $sql = "SELECT number, user_id, pass_word, usr_name, dt FROM user_table_2 ORDER BY number"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); // 取り出したデータを表示する //この後は、tableタグ等で表としてデータを表示しております。 ---------------------------------------------------------------- >「本登録日時」項目だけnow()にするとか。 すみません。色々と試行錯誤してみたのですが、正常にinsert(テーブルのコピー)がされず、 die("データ抽出エラー")が返ってしまいます。。。 selectとinsertを二つに分けるという形を取るのであれば、現在の構文を応用させるのではなく、 テーブルのコピー時の【 INSERT INTO 】と【 SELECT * FROM 】を独立させるという事なのでしょうか? 何卒厚かましいお願いかと存じますが、今ひとつご教授いただけますでしょうか? どうぞよろしくお願いいたします。

noname#124020
noname#124020
回答No.1

now() を使えばよさげなんですが・・・日時同士の足し算ってのがイマイチわからない?

nazal2010
質問者

お礼

ご回答をいただき、大変感謝いたします。 そうなんですよね、now() は仮登録時には仕様しているのですが、 仮登録日時と本登録日時の差分を求めなければいけないのかなと 思いまして・・・ とりあえず色々試してみますので、出来れば具体的な構文を アドバイスしていただけると大変助かります。 この度は、お忙しい中ありがとうございます。

関連するQ&A

  • PHPからMySQL・異なるDBにコピー

    PHPからMySQL・異なるDBに接続し同じ構造のテーブルのデータをコピーすることは可能ですか? 以下を実行するとクエリが実行されず「コピーできません」が表示されてしまいます。 どのようにすればコピーできるか教えてください。 $connect1 = mysql_connect("localhost", "user1", "pass1") ; mysql_select_db("db1", $connect1); //db1内にtable1 $connect2 = mysql_connect("localhost", "user2", "pass2") ; mysql_select_db("db2", $connect2); //db2.内にtable2 $sql = "INSERT INTO `db1` . `table1` SELECT * FROM `db2` .`table2`;"; $result = mysql_query($sql, $connect1)or die("コピーできません"); //$result内「$connect1」でも「$connect2」結果は同じです。 //table1とtable2の構造は同じです。

    • ベストアンサー
    • PHP
  • SQLインジェクションの対策

    SQLインジェクションの対策 いつもお世話になっております。 SQLインジェクションの対策についてお伺いいたします。 もともと↓のようなSQL文だったものを "select user_id from table where user_id='{$user_id}'" 以下のように変更しました。 "select user_id from table where user_id='" . mysql_real_escape_string($user_id) . "'" 以下のように実行されていたSQL文は select user_idfrom table where user_id='10001' and 'a'='a' ↓のようにエスケープ処理して実行されるようになりました。(入力値は「10001' and 'a'='a」) select user_id from table where user_id='10001\' and \'a\'=\'a' ですが、phpMyAdminで実行してみるとどちらのSQL文も同じ結果が取得できてしまいます。 これでは対策になっていないと思ったので、質問させていただきました。 (magic_quotes_gpcはoffに設定しています。) なにか他の方法がいいのでしょうか。 ご教示よろしくお願いいたします。 <環境> PHP 5.1.6 MySQL 5.0.45

    • ベストアンサー
    • PHP
  • SQLの結果が返ってこない

    PHP+mysqlで以下のようなSQL文で処理を行ったのですがデータが返ってきません。 $sql = 'SELECT * FROM books WHERE id=3'; $recordSet = mysql_query($sql); if(mysql_fetch_assoc($recordSet)){ while ($table = mysql_fetch_assoc($recordSet)) {        処理     } } mysqlの画面で SELECT * FROM books WHERE id=3 を入力してみるとしっかりと結果が返ってきます。 ちなみに1行目を、違うテーブルの $sql = 'SELECT * FROM podcast WHERE code=3 ORDER BY dcdate DESC LIMIT 0,3'; にしてみると、データが表示されます。 2日間かけてずっと試行錯誤してみたのですが、完全に行き詰ってしまったので、何か考えられる原因はありませんでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP+MySQLでデータ登録がうまくいかない

    いつもお世話になっています。 早速質問です。 ユーザ登録フォームの作成をしています。 Select文を使って2重登録の確認後、DBに登録するのですが 2重登録はちゃんと機能しているのに、登録が出来ません。 どのようにしたらいいか、アドバイスいただけますか? お手数ですが、よろしくお願いします。 mysql_query("lock tables user_data write"); $sql = "select USER from user_data where USER = '" . $_POST["USER"] . "'"; $res = mysql_query($sql); if (mysql_num_rows($res) > 0) { echo "すでに登録済みです。"; mysql_query("unlock tables"); mysql_close($con); exit; } $sql = "insert into user_data(USER, pass) values ('" . $_POST["USER"] . "','" . $_POST["pass"] . "');"; mysql_query($sql); mysql_query("unlock tables"); mysql_close($con);

    • ベストアンサー
    • MySQL
  • テーブル属性変更後のデータ移動

    あるテーブルのキー項目をnumberからvarchar2に変更します。 テーブルの全件を仮テーブルを作成してコピー 元テーブルをTRUNCATE後、型変換 仮テーブルのデータを元テーブルへコピー という流れで、それぞれSQL文はできましたが、 仮テーブルのデータを元テーブルへコピーを実現する SQLが思い浮かびません。 insert into AAA select * from BBBだと、属性もコピーされてしまう? とのことで、ご教授お願いいたします。

  • TIMESTAMP型が含まれるテーブルの列名の取得

    Oracle 11gを使用しているSQL初心者です。 テーブルの列名を取得する方法についての質問です。 テーブルの列名を取得するときは以下のSQLで取れると思っています。 select column_name from user_tab_columns where table_name = 'テーブル名'; --実行結果-- COLUMN_NAME ------------------------------ NAME1 NAME2 しかし、テーブルにTIMESTAMP型が含まれていると 「レコードが選択されませんでした。」 と表示されます。 TIMESTAMP型が含まれるテーブルは上記のSQLでは取得できないのでしょうか。 TIMESTAMP型が含まれるテーブルの列名の取得方法をご存知の方がいらっしゃいましたら、 ご教示ください。よろしくお願い致します。

  • MySQLで戻り値が重複している

    PHPとMySQLを使っています。 下のようなSQL文を作成し、値を引き出そうとしています。 <SQL文> SELECT * FROM table_name WHERE A = "あ" AND B='い' <DBに登録済みの取り出したいデータ> あ、い、う、え、お ところが、戻ってくる値が、 あ、あ、い、い、う、う、え、え、お、お のように、値が重複して戻ってきます。 いろいろ調べましたが、原因がさっぱりわかりません。 ご存知の方、教えていただけると助かります。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • phpmyadminのリレーション

    SELECT * FROM table1,table2 WHERE table1.id=table2.data_id; phpmyadminにて、上記のようなSQL文を実行してtable1とtable2のデータを リレーションにより表示します。 この時に表示した内容のテーブルを新規作成するにはどうすれば良いでしょうか?

    • ベストアンサー
    • MySQL
  • 同じテーブル内同士で更新したい

    MySQLバージョン4.1.16を使用しています。 同じテーブル内で、user_idが「aaaa」のnumカラム値を 「bbbb」のnumカラム値でupdateしたいのですが、 次のようなsqlだとエラーが出てしまいます・・・ なんとかしてできる方法はないでしょうか? $sql = "UPDATE users SET num = (SELECT num FROM users WHERE user_id = 'bbbb') WHERE user_id = 'aaaa'"; Error Number: 1093 You can't specify target table 'users' for update in FROM clause テーブル「users」 +----------+---------+ |  user_id  |  num  | +----------+---------+ |  aaaa   |   1   |←成功すれば2になる +----------+---------+ |  bbbb   |   2   | +----------+---------+

  • データの取得方法

    失礼いたします。 SQL文でDBからデータを取得して、それを 表示したいのですがうまくいきません。 どこを間違っているか、どうしたらいいか コメントお願いします。 //他のページからIDを取得 <?php $aid=htmlspecialchars($_GET["id"]); ?> //SQL <?php $sql = "SELECT A.USERID,A.NAME,B.BIL_ID,B.B.BIL_NAME FROM USER A,BIL B WHERE A.BIL_ID=B.BIL_ID AND USER_ID=".intval($_GET["aid"]); !$an = mysql_query($sql,$db) $user = mysql_fetch_row($an); mysql_free_result($an); ?> //データの表示 //SQLで実行した'BIL_ID'を表示したい。 <TD><INPUT type="text" name="bid" value="<?php print(intval($_GET["$user[2]"])) ?>"></TD>

    • ベストアンサー
    • PHP

専門家に質問してみよう