如何显示/选择当日报价

问题描述 投票:3回答:8

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

这是非常实施的基本思想,我当然已经涵盖了这一思想。问题是,每次刷新页面时,都会弹出一个新引号。这不是我想要的。

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

任何人都可以指出我正确的方向吗?

php refresh
8个回答
5
投票

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

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

如果您不想在数据库中指定日期,您也可以在脚本中硬编码开始日期(比如今天的日期),然后相应地获取报价 - 所以今天你要获取第一个数据库中的行;明天,第二,等等。


4
投票

您的最终代码看起来应该是这样的,其中数据库中的每个引号都有“day”字段作为它应显示的日期(0-365)。

<?php
$query = $pdo->prepare("SELECT * FROM `quotes` WHERE `day` = ?");
$query->execute(date("z", strtotime("today")));

$row = $query->fetch();
echo $row['quote'];
?>

3
投票

这并不像第一眼看上去那么容易,也许。

假设您有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

2
投票

我就是这样做的:

首先,我假设您可以在数据库中获得引号数量,我将其称为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)th行。


2
投票

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

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


2
投票

感谢所有的答案。我一直在寻找的答案,不幸的是没有给出。

这就是我如何消除这个问题:

我创建了一个名为quote的新表。

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

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


2
投票

使用日期作为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是先前设置的,并且是quote数据库中的条目数量。


1
投票

立即获取00:00 unix时间并将其作为$ variable存储在您的代码中。

$id = (time() - $variable) % (24 * 60 * 60);
"SELECT * FROM `quotes` WHERE `id` = {$id}"
© www.soinside.com 2019 - 2024. All rights reserved.