每周从sql获取新结果

时间:2012-05-01 01:13:45

标签: php mysql random

我有一个表,我想从中选择一行并将其显示给用户。每周我都想让网站随机自动选择另一行。所以,基本上我想每周都得到新的结果,而不是每次用户访问该页面。 我现在正在使用此代码:

$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命令吗?如果是这样,它是如何工作的?

3 个答案:

答案 0 :(得分:2)

我的建议如下:

  • 存储随机结果idtimestamp是其他类型的持久存储(文件,数据库表等)。
  • 设置cron作业或其他自动化任务以更新每周上方的记录。如果您无权访问此类解决方案,则可以编写代码以在每次加载页面时执行此操作,并检查timestamp列。但是,这效率很低。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

在这里,您可以添加

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

这意味着在每个星期日的0:00,php /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