我有一个表,我想从中选择一行并将其显示给用户。每周我都想让网站随机自动选择另一行。所以,基本上我想每周都得到新的结果,而不是每次用户访问该页面。 我现在正在使用此代码:
$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命令吗?如果是这样,它是如何工作的?
答案 0 :(得分:2)
我的建议如下:
id
,timestamp
是其他类型的持久存储(文件,数据库表等)。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