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

我的建议如下:

  • 存储随机结果id并且timestamp是某种其他类型的持久存储(文件、数据库表等)。
  • 设置一个 cron 作业或其他自动化任务来每周更新上述记录。如果您无权访问此类解决方案,您可以编写代码在每个页面加载时执行此操作并检查timestamp列。然而,这是非常低效的。
于 2012-05-01T01:16:52.280 回答
1

就在这里。使用 php 中的 date 函数并使用 fwrite 将每周和相应的行写入文件。然后,使用 if 语句检查它是否是新的一周,如果它得到一个新的随机行,则将其写入文件并返回,如果不是,则返回该周的相同行。

于 2012-05-01T01:18:10.713 回答
0

cronjob 是最好的解决方案。创建一个脚本weeklynumber.php,就像您已经拥有的一样,它会生成一个条目。在此之后,转到您的控制台,然后使用crontab -e.

在这里,您可以添加

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

这意味着在每个星期日的 0:00php /path/to/weeklynumber.php执行。

但是所有这些都假设您使用的是 UNIX 并且您可以访问创建 cronjobs。如果没有,这里有另一个解决方案:散列周数和年份,并使用它来生成周数。

// 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 返回该数字,这一切都可以通过单个查询完成

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