如何显示/选择每日报价


How to show/select Quote Of The Day

我有一个有很多引号的数据库,我想创建一个"Quote of the Day"页面。基本思想是从数据库中获取所有报价,将其放在数组中,并在数组中的随机索引号处回显报价。

这是非常需要实施的基本想法,到目前为止我当然已经谈到了。问题是,每次刷新页面时,都会弹出一个新报价。这不是我想要的。

我希望页面仅在0:00刷新报价或其他时间,但这不是重点)。

谁能指出我正确的方向?

听起来过于复杂。做这样的事情的正常方法是

  • 将报价存储在数据库中;为每一行指定一个日期
  • 在每个请求中,从数据库中获取当天的报价并显示它。

如果您不想在数据库中指定日期,您还可以在脚本中硬编码开始日期(例如,今天的日期),然后相应地获取报价 - 所以今天,您将获取数据库中的第一行; 明天,第二行,依此类推。

您的最终代码应如下所示,其中数据库中的每个引号都具有"day"字段作为它应该显示的日期 (0-365)。

<?php
$query = $pdo->prepare("SELECT * FROM `quotes` WHERE `day` = ?");
$query->execute(date("z", strtotime("today")));
$row = $query->fetch();
echo $row['quote'];
?>

这并不像乍一看那么容易,也许。

假设您有 365 个报价,并且这个数字不会改变 - 很简单,您可以每天使用 1。因此,您只需要一个算法来为您提供一年中的天数,这将是您从数据库中提取的行的 id。例如,2 月 1 日是数据库中的第 32 天 ->去那个报价。

假设您有 2000 个报价,并且数字可能会发生变化 ->您将如何处理?你的方法是什么?是否允许每年显示两次报价?如果您的报价超过 365,将如何显示所有报价?

更新:

//get number of quotes from DB
SELECT COUNT(*) AS cnt FROM quotes
$day_in_year=date('z')+1; //-> this will give you the number of days in a year, for today

使用日期作为 RNG 种子,这样它就会每天更新:)

下面是一些代码:

mt_srand(date('dmY')); //Sets mt_rand seed to date.
$displayno = mt_rand(0, $total_quotes); //Generates random number with that seed, and the amount of quotes.
display_quote($displayno); //Pre-defined function that gets quote from database, and displays it.

编辑:当我测试它时,这非常有效。(http://pi.berboe.co.uk/stacks.php 是一个工作示例,它每天选择一个介于 0 和 200 之间的随机数。

这假定 $total_quotes 是较早设置的,并且是报价数据库中的条目数。

这就是我会这样做的:

首先,我

假设您可以在数据库中获取报价数,我将其称为number_of_quotes

然后你可以使用类似PHP microtime()函数来获取os timestamp并将其除以

(1000 /* for converting microseconds to milliseconds */ * 
1000 /* milliseconds to seconds */ * 
3600 /* seconds to hours */ * 
24 /* hours to days */)

为了获得到现在为止的天数,我将其称为 number_of_days_passed .

最后,您可以从报价表中获取number_of_days_passed % (number_of_quotes + 1)行。

另一种解决方案是mark已经显示的引号。这样,您应该只决定如何在白天选择同一个报价。

Next报价可以在一天开始时随机选择并标记为todays报价。可以使用CRON执行此任务,您只需选择标记为todays的报价(白天)。

感谢您的所有答案。我正在寻找的答案,不幸地没有得到

这就是我消除问题的方式:

我创建了一个新表,称为 quote。

它有 1 行:当天最后一个报价更新的日期和报价本身。当日期与服务器日期不匹配时,我生成了新报价单,并使用新报价单和新日期更新了表格。如果它确实与当前日期匹配,它将获取报价并显示它。

相当简单的解决方案,但对我来说非常开箱即用。

获取今天 00:00 unix 时间,并将其作为$variable存储在代码中。

$id = (time() - $variable) % (24 * 60 * 60);
"SELECT * FROM `quotes` WHERE `id` = {$id}"