ブログ チュートリアルを使用して、投稿が x 日間アクティブになるまで、「メイン」インデックス ページで投稿を表示できるオプションが必要です。この x 日間の期間の後、投稿をデータベースで「期限切れ」に設定したいと思います。これを達成するための最良の方法について、誰かが光を当てることができますか?
2 に答える
おそらく、これを行うための最良の方法は、SQLselectステートメントを使用することです。MySQLには多くの組み込みの日付メソッドがあります。しかし、最初に、あなたが達成しようとしていることを定義する必要があります。created_at
また、使用しているフィールド( 、allotted_time
)は両方ともフィールドであることに注意してくださいDATE
。
あなたがしたいのは、現在実行中の投稿のみを表示することです。広告が開始された日付がわかっているので、現在の日付から開始日を差し引いて、広告の有効期限が切れるまでの残り時間を計算できます。これは、DATEDIFF
関数と関数を使用して実行できCURDATE
ます。
DATEDIFF(CURDATE(), `created_at`)
上記のステートメントを実行しようとすると、広告が最初に作成されてから経過した日数である整数が返されることがわかります。整数を返すのでDATEDIFF
、整数に変換する必要allotted_time
もあります。
DATEDIFF(`allotted_time`, `created_at`)
これで、広告の掲載時間と、広告が作成された日から何日経過して広告を掲載する必要があるかがわかりました。明らかに、広告が作成日から割り当てられた時間までの日数よりも短い日数の間広告が掲載されている場合、それはまだ掲載されています。
WHERE DATEDIFF(CURDATE(), `created_at`) < DATEDIFF(`allotted_time`, `created_at`)
これをすべてまとめると、これに似たステートメントが得られます。
SELECT `id`
FROM `ads`
WHERE
DATEDIFF(CURDATE(), `created_at`) < DATEDIFF(`allotted_time`, `created_at`)
ページネーションを使用する場合は、次を使用します。
ここに注意 してください $x はあなたの間隔です
$this->Post->recursive = 0;
$this->paginate = array(
'conditions' => array('DATEDIFF(CURDATE(), DATE(Post.created)) >' => $x)
);
$this->set('posts', $this->paginate());
通常の find() の場合、これを使用します。
$this->Post->find('all',
array(
'conditions' => array('DATEDIFF(CURDATE(), DATE(Post.created)) >' => $x)
)
);