使用PHP和Mysql每周一次随机数据库查询

时间:2013-03-10 00:39:51

标签: php mysql web-applications

我有关于狗品种的网站,其中有一个“当天的狗”部分。我希望“每日的狗”每天一次显示一条新狗(来自mysql数据库)。使用php和mysql,我想这个操作实际上非常简单。

$connection = mysqli_connect("localhost", "username", "password");

$randomdog = mysqli_query($connection, "SELECT * FROM dogtable WHERE id >= RAND() * (SELECT MAX(id) FROM dogtable) LIMIT 1"));

echo $randomdog

当然,每次重新加载页面时,这都会给我一个随机的狗。我希望$ randomdog每天只改变一次。

cron工作会成为答案吗?我之前从未实现过,但我的网站上安装了cpanel,所以我认为它不会太毛茸茸。

如果我要使用cron作业,我假设我要保存

$connection = mysqli_connect("localhost", "username", "password");

$randomdog = mysqli_query($connection, "SELECT * FROM dogtable WHERE id >= RAND() * (SELECT MAX(id) FROM dogtable) LIMIT 1"));

作为.php文件,每天由cron作业运行一次,每天更新一次$ randomdog。但是,我怎么能把$ randomdog传递到一个单独的页面来回应呢?

我以前在这里问了一个类似的问题,答案通常是“存储一个unixtimestamp,一周到它,当前时间= =时间+ 1周再次执行”。

这不可能用PHP吗?它只在用户请求时执行,当然?意思是'时间+ 1周'变量不可能存储在某处。

无论如何,一定要纠正我。

4 个答案:

答案 0 :(得分:4)

是的,您可以使用rand()来获取随机项。您希望它被种子化,因此每次调用它时都会返回相同的初始rand值。你希望它每天都播种相同的种子。您可以使用dayofyear()来获取一年中的某一天(1-366)。格式为:

select * from TABLE order by rand(dayofyear(CURRENT_DATE)) limit 1

答案 1 :(得分:0)

你可以创建另一个表,可能只包含一行,它将存储当天选择的当时狗 - 它可能只有一个唯一的id指向dogtable

隔夜cron作业将更新此表。它不一定是随机的,它可以使用更高级的技术,例如查看网站使用历史,以实际选择更受欢迎的狗。

网站将使用此dogoftheday表格显示当天的狗。

答案 2 :(得分:0)

我可以看到很多方法,最简单(不是最简单)的方法如下:

  

使用cron作业(你可以很容易地从cPanel安装它),cron作业会选择随机选择并存储,我建议用以下方法存储它

     
      
  1. 在你的表中添加一个新的fiel,而不是null,默认值为0,只有当天选择的狗的值为1 (将通过cronjob脚本更新) < / LI>   
  2. 如果您对更高级的内容感兴趣,例如保留每日选择的狗的历史记录(例如:不要每周或每月选择两次),请创建一个新表选择狗/日,如果你按时间排序,今天的狗是最新的插入记录
  3.   
  4. 如果您对保持跟踪或任何高级内容不感兴趣,并希望以自己的方式(优化一些有关性能和内存的东西),请将cron作业写入文件
  5.   

我希望这会有所帮助

答案 3 :(得分:0)

  1. 创建一个表来存储随机ID并初始化它
  2. CREATE TABLE random_dog
    (
         INT id
    );
    
    INSERT INTO random_dog VALUES(RAND());
    
    1. 检查您是否有活动正在运行 - 请参阅this

    2. 创建活动

    3. CREATE EVENT
      ON SCHEDULE EVERY DAY STARTS '00:00:00'
      ON COMPLETION PRESERVE
      DO UPDATE random_dog SET id = RAND();
      
      1. 对于查询,只需使用random_dog表
      2. SELECT * FROM dogtable 
        JOIN random_dog ON (random_dog.id = dogtable.id)