0

私は現在、学校で報告されている学生を管理するためのシステムを開発していますが、つまずきに陥っています。私の SQL テーブル ('onreport') には、'duration' というフィールドがあります。この行に格納された日付が渡されたレコードを削除したいのです。つまり、レポートの有効期限が切れています。

    <?php
    include('connect.php'); //connect to the database
    $today = new DateTime("now");
    $f_today=$today->format('Y-m-d');
    mysql_query('DELETE FROM onreport WHERE duration ==$f_today');
    //print('$f_today')
    ?>

これがうまくいったとしても、これが最も効率的な方法ではないかもしれないことに気づきましたが、私は必死になりました! コメントアウトされた print ステートメントを含めると、表の形式と同じ形式で今日の正しい日付が出力されるため、コードが実行されていることがわかります。期間列のタイプは「日付」で、テーブルでは yyyy-mm-dd として表示されます

4

1 に答える 1

1

日付を比較する代わりに、文字列を比較しているようですが、これは一般的に悪い習慣と考えられています。しかし、DB スキーマを投稿していないため、わかりにくいです。

ただし、今日より前に投稿されたすべてのレポートを削除する場合は、フィールド期間が DATE タイプであると仮定して、純粋な SQL クエリを使用できます。

DELETE FROM onreport WHERE TIMESTAMPDIFF(DAY,CURDATE(),duration)>0

このクエリは、現在のサーバー時刻である CURDATE() と期間の値の 2 つの日付を比較し、結果を日数で返します。この値が 0 より大きい場合、行は削除されます。

于 2013-02-17T17:33:37.270 に答える