繁体   English   中英

每周从sql获取新结果

[英]get new result from sql every week

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

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

我的建议如下:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM