1

そこから1行を選択してユーザーに表示したいテーブルがあります。毎週、ウェブサイトが別の行をランダムに自動的に選択するようにしたいと考えています。したがって、基本的には、ユーザーがページにアクセスするたびにではなく、毎週新しい結果を取得したいと考えています。私は今このコードを使用しています:

$res = mysql_query("SELECT COUNT(*) FROM fruit");
$row = mysql_fetch_array($res);
$offset = rand(0, $row[0]-1);
/* the first three lines to pick a row randomly from the table */
$res = mysql_query("SELECT * FROM fruit LIMIT $offset, 1");
$row = mysql_fetch_assoc($res);

このコードは、ユーザーがページにアクセスするたびに新しい結果を取得し、更新するたびに別のランダムな行が選択されます。毎週更新したいのですが、結果はすべてのユーザーで同じです。それを行うphpコマンドですか?もしそうなら、それはどのように機能しますか?

4

3 に答える 3

2

私の提案は次のようになります。

  • ランダム結果idtimestamp保存し、他の種類の永続ストレージ (ファイル、DB テーブルなど) です。
  • cron ジョブまたはその他の自動化されたタスクをセットアップして、週単位で上記のレコードを更新します。そのようなソリューションにアクセスできない場合は、コードを記述してページの読み込みごとに実行し、timestamp列をチェックすることができます。しかし、それはかなり非効率的です。
于 2012-05-01T01:16:52.280 に答える
1

はいあります。PHP で日付関数を使用し、fwrite を使用して毎週および対応する行をファイルに書き込みます。次に、if ステートメントを使用して、それが新しい週であるかどうかを確認し、新しいランダムな行を取得する場合はファイルに書き込み、それを返します。そうでない場合は、その週の同じものを返します。

于 2012-05-01T01:18:10.713 に答える
0

cronjob が最適なソリューションです。weeklynumber.phpエントリを生成するスクリプトを作成します。この後、コンソールに移動し、 を使用して crontab ファイルを開きますcrontab -e

ここで、追加できます

0 0 * * 0 php /path/to/weeklynumber.php

これは、毎週日曜日の 0:00 にphp /path/to/weeklynumber.php実行されることを意味します。

ただし、これはすべて、UNIX を使用していて、cron ジョブを作成できることを前提としています。そうでない場合は、別の解決策があります。週番号と年をハッシュし、それを使用して週番号を生成します。

// Get the current week and year
$week = date('Wy'); 
 // Get the MD5 hash of this
$hash = md5($week);
// Get the amount of records in the table
$count = mysql_result(mysql_query("SELECT COUNT(*) FROM fruit"),0);
// Convert the MD5 hash to an integer
$num = base_convert($hash, 16, 10);
// Use the last 6 digits of the number and take modulus $count
$num = substr($num,-6) % $count;

上記は、テーブル内のレコードの量が変わらない限り機能することに注意してください。

最後に、現在の方法について少しだけメモします。行をカウントし、PHP から乱数を取得し、DBMS にその数を返すように要求する代わりに、すべて 1 つのクエリで実行できます。

SELECT * FROM fruit ORDER BY RAND() LIMIT 1
于 2012-05-01T01:36:48.857 に答える