2

PHPとmySQLの質問あなたが私を助けてくれることを願っています。データベースの更新オプションがあります(ボタンをクリックすると、update.phpファイルが実行されます)。このupdate.phpは、PASSENGERテーブルを分離しようとする役割を果たします。

現在、私は1つの巨大なPASSENGERテーブルを持っています。ここで、今日ビジネスで旅行が発生した場合(これは旅行予約会社です)、それらはCUSTOMERテーブルにありますが、アーカイブされた顧客(たとえば、昨日から旅行した人)が必要です。後方に、ARCHIVED_CUSTOMERテーブルに配置されます。

現在、現在のPASSENGERテーブルからの情報を使用してARCHIVED_PASSENGERテーブルに追加している小さなPHPスクリプトがありますが、パラメーターがPASSENGERIDである場合のみです。

私はスクリプトのDELETEFROMPASSENGERの部分に非常に満足していますが、データベースから大量の情報を収集して移動できるコードを誰かが知っているかどうか疑問に思っていました。 PASSENGERテーブルのactiveUntil部分を介して。

PHPスクリプトを非常に削除しましたが、自分自身を明確にしたことを願っています。

   mysql_connect("localhost", "mysql_username", "mysql_password") or die(mysql_error());
    mysql_select_db("mysql_database") or die(mysql_error());

    $query10 = ("SELECT p.surname, p.passNo, p.activeUntil FROM PASSENGER p WHERE passNo = '20120003'");

            $result = mysql_query($query10);  
            while($row = mysql_fetch_array($result))
            {

$surname =  $row['surname'];
$passNo = $row['passNo']; 

mysql_query("INSERT INTO ARCHIVED_PASSENGER (surname, passNo) VALUES ('$surname', '$passNo')  ") 
    or die(mysql_error());  

    mysql_query("DELETE FROM PASSENGER (surname, passNo) VALUES ('$surname', '$passNo')  ") 
    or die(mysql_error());  


        }
4

2 に答える 2

4

NOW()MySQLでは現在のタイムスタンプを提供します。24時間前はDATE_ADD(NOW(),INTERVAL -1 DAY)です。

数字と同じように日付を比較できます。24時間前activeUntil < DATE_ADD(NOW(),INTERVAL -1 DAY)の行を選択します。activeUntil

INSERTあなたはそのSELECTように組み合わせることができます:

INSERT INTO `archived_passenger` (columns.....) SELECT columns... FROM `passenger` WHERE ...

achived_passenger(の列の名前がの列の名前と完全に一致する場合は、最初の列のセットを省略できます。すべての列を選択する場合は、2番目の列のセットの代わりにpassenger使用できます)*

それはあなたがやろうとしていることをするのを助けるのに十分な情報であるはずだと思います。さらにサポートが必要な場合はお知らせください。

于 2012-04-23T14:03:22.920 に答える
1

「旅行日」フィールドが呼び出されactiveUntil、それがDATEまたはDATETIMEデータ型であると仮定します。

... WHERE activeUntil >= DATE_ADD(NOW(), INTERVAL -1 DAY)

編集:または<=、「昨日以降」の意味に応じて。

于 2012-04-23T14:08:26.930 に答える