0

私は、「今日の犬」セクションがある犬種に関するウェブサイトを持っています。'今日の犬' で (mysql データベースから) 1 日に 1 回新しい犬を表示したいと思います。php と mysql を使用すると、操作は実際には非常に簡単になると思います。

$connection = mysqli_connect("localhost", "username", "password");

$randomdog = mysqli_query($connection, "SELECT * FROM dogtable WHERE id >= RAND() * (SELECT MAX(id) FROM dogtable) LIMIT 1"));

echo $randomdog

もちろん、これにより、ページがリロードされるたびにランダムな犬が表示されます。$randomdog を 1 日 1 回だけ変更したい。

cronジョブが答えになるでしょうか? これまでに実装したことはありませんが、自分のサイトには cpanel がインストールされているので、あまり面倒ではないと思います。

cronジョブを使用する場合、保存すると仮定しています

$connection = mysqli_connect("localhost", "username", "password");

$randomdog = mysqli_query($connection, "SELECT * FROM dogtable WHERE id >= RAND() * (SELECT MAX(id) FROM dogtable) LIMIT 1"));

cron ジョブによって 1 日 1 回実行される .php ファイルとして、1 日 1 回 $randomdog を更新します。しかし、どうすれば $randomdog を別のページに渡してエコーさせることができるでしょうか?

以前にここで同様の質問をしたことがありますが、答えは通常、「unixtimestamp を 1 週間で保存し、現在の時刻 == 時間 + 1 週間のときに再度実行する」という行に沿っています。

それはphpでは不可能ですか?ユーザーが要求したときにのみ実行されますよね?つまり、「時間 + 1 週間」変数をどこかに保存することはできません。

とにかく、私を訂正してください。

4

4 に答える 4

4

はい、rand() を使用してランダムなアイテムを取得できます。呼び出されるたびに同じ初期 rand 値を返すようにシードする必要があります。毎日同じ種をまきたい。dayofyear() を使用して、年間通算日 (1 ~ 366) を取得できます。形式は次のとおりです。

select * from TABLE order by rand(dayofyear(CURRENT_DATE)) limit 1
于 2013-03-10T00:46:18.497 に答える
0

これを行う方法はたくさんありますが、最も簡単な (最も簡単ではない) 方法は次のとおりです。

cronジョブを使用します(cPanelから非常に簡単にインストールできます)。cronジョブはランダムな選択を選択して保存します。次の方法で保存することを提案します

  1. テーブルに新しいフィールドを追加します。null ではありません。デフォルト値は 0 です。その日に選択された犬だけが値 1になります (cronjob スクリプトによって更新されます)。
  2. 毎日選択された犬の履歴を保持するなどのより高度なことに興味がある場合(例: 週または月に 2 回同じものを選択しないようにする)、注文する場合、選択した犬/日を配置する新しいテーブルを作成します。時間、今日の犬は最新の挿入レコードです
  3. トレースや高度なものを保持することに興味がなく、独自の方法で(パフォーマンスとメモリに関するいくつかのものを最適化するために)したい場合は、cron ジョブをファイルに書き込みます。

これが役立つことを願っています

于 2013-03-10T00:58:26.883 に答える
0
  1. ランダム ID を格納するテーブルを作成し、初期化します

すなわち

CREATE TABLE random_dog
(
     INT id
);

INSERT INTO random_dog VALUES(RAND());
  1. イベントが実行されていることを確認してください -これを参照してください

  2. イベントを作成する

すなわち

CREATE EVENT
ON SCHEDULE EVERY DAY STARTS '00:00:00'
ON COMPLETION PRESERVE
DO UPDATE random_dog SET id = RAND();
  1. クエリには、単純に random_dog テーブルを使用します

すなわち

SELECT * FROM dogtable 
JOIN random_dog ON (random_dog.id = dogtable.id)
于 2013-03-10T01:28:29.640 に答える
0

おそらく、現在選択されているその日の犬を格納する単一の行で構成される別のテーブルを作成できますdogtable

一晩の cron ジョブがこのテーブルを更新します。単なるランダムである必要はなく、より高度な手法を使用することもできます。たとえば、サイトの使用履歴を調べて、より人気のある犬を実際に選択することができます。

Web サイトでは、このdogofthedayテーブルを使用してその日の犬を表示します。

于 2013-03-10T00:46:32.077 に答える