2

ユーザーが広告を投稿できる Web サイトを作成しました。

一定時間後に Ads テーブルの 1 行を自動的に変更したいと考えています。

例: ユーザーが AD をアップロード/投稿し、投稿する前に 8 日間表示するか 16 日間表示するかを選択するとします。

これをcronで確認する必要がありますか、それとももっと良い方法がありますか?

Visible は DB の「アクティブ」と呼ばれます - tinyint 1 または 0。

前もって感謝します、

4

3 に答える 3

2

選択したタイムスケールに基づいて、これを管理する2つのオプションがあります。

  1. 広告に有効期限を保存し、有効期限> NOW();を含めます。広告を選択するためのクエリで(この種の場合、「アクティブ」フィールドの要件は無効になります。

  2. これを管理するには、イベントを使用します。

方法1では、一部の管理者が定期的に「広告をクリーンアップ」する必要がある場合があります。

方法2-プロシージャでイベントを作成することはまだできませんが(前回チェックしたとき)、他のチェックやその他のチェックを実行しなくても、この種の管理業務を設定して忘れることができます。

各イベントには一意の名前を付ける必要があります。そうしないと、すでに指定されているイベントを強制終了します...

例:

<?php

$qry = "insert into ads values ( 'x', 'y', 'z' );"; 
/* db execute qry (pdo or what ever) */
$adId = // retriev a unique reference for ad.
$days = $_POST['expire'] == 16 ? 16 : 8;

$qry = "CREATE EVENT updateAd_".$adId."
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL ".$days." DAY
    ON COMPLETION NOT PRESERVE
    DO
    update ads set active = 'false' where ad_id = ".$adId.";";
// db execute qry (pdo or what ever);
?>

イベントは自分のデータベースではなくmysqlデータベースに保存されるため、実装するには管理者レベルの権限が必要です。

于 2013-03-14T03:16:54.960 に答える
1

代わりに有効期限を守っていただけますか?したがって、日付を格納する列を作成します。ユーザーが広告を作成したら、今から 8 日後の日付を計算し、それを列に格納します。次に、広告をプルするクエリで、有効期限がまだ先の広告に制限できます。

于 2013-03-14T02:55:41.733 に答える
1

有効期限を格納します。次に、クエリを使用します。

select * from table where Expiration_date>now();

PHP を使用している場合は、strtotime関数を確認してください。それを使用して、次のように日付を作成できます。

$expiration = date("Y-m-d H:i:s",strtotime('+ '.$num.'days'));

「Expiration_date」フィールドがある場合、「active」フィールドは必要ありません。ステートメント

select Expiration_date>now() as active from table

同等になります。

于 2013-03-14T03:02:19.597 に答える