0

我有一个关于狗品种的网站,其中有一个“每日狗”部分。我希望“每日狗”每天显示一次新狗(来自 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

4 回答 4

4

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

select * from TABLE order by rand(dayofyear(CURRENT_DATE)) limit 1
于 2013-03-10T00:46:18.497 回答
0

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

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

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

于 2013-03-10T00:46:32.077 回答
0

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

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

  1. 在你的表中添加一个新的字段,不为空,默认值为 0,并且只有当天选择的狗的值为 1 (将通过 cronjob 脚本更新)
  2. 如果您对更高级的内容感兴趣,例如保留每日所选狗的历史记录(例如:每周或每月不选择相同的两次),请创建一个新表,您可以在其中放置选择的狗/天,如果您通过以下方式订购时间,今天的狗是最新插入的记录
  3. 如果您对保留跟踪或任何高级内容不感兴趣,并且希望有自己的方式(优化一些有关性能和内存的内容),请让 cron 作业写入文件

我希望这有帮助

于 2013-03-10T00:58:26.883 回答
0
  1. 创建一个表来存储随机id并初始化它

IE

CREATE TABLE random_dog
(
     INT id
);

INSERT INTO random_dog VALUES(RAND());
  1. 检查您是否有正在运行的事件 - 看到这个

  2. 创建活动

IE

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

IE

SELECT * FROM dogtable 
JOIN random_dog ON (random_dog.id = dogtable.id)
于 2013-03-10T01:28:29.640 回答