我有一个包含大量报价的数据库,我想创建一个"Quote of the Day"
页面。
基本思路是从数据库中获取所有引号,将其放在一个数组中,并在数组中的随机索引号处回显引号。
这是非常实施的基本思想,到目前为止我已经介绍过了。 问题是,每次刷新页面时,都会弹出一个新引号。 这不是我想要的。
我希望页面刷新报价仅在0:00
(或其他时间,但这不是重点)。
有人可以指出我正确的方向吗?
答案 0 :(得分:5)
这听起来过于复杂。做这样的事情的正常方法是
如果您不想在数据库中指定日期,您还可以在脚本中硬编码开始日期(比如今天的日期),然后相应地获取报价 - 所以今天你要获取数据库中的第一行;明天,第二个,等等。
答案 1 :(得分: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'];
?>
答案 2 :(得分:3)
这并不像第一眼看上去那么容易,也许。
假设您有365个引号,这个数字不会改变 - 很简单,您可以每天使用1。因此,您只需要一个算法,该算法可以为您提供一年中当天的数字,这将是您从数据库中提取的行的ID。例如。 2月1日是数据库中的32天 - &gt;去找那个报价。
假设您有2000个引号并且数字可能会更改 - &gt;你将如何处理?你的方法是什么?是否允许每年两次显示报价?如果你有超过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
答案 3 :(得分: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是先前设置的,并且是报价数据库中的条目数量。
答案 4 :(得分: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)
行。
答案 5 :(得分:2)
另一个解决方案是mark
已经显示引号。这样你就应该只决定如何在白天选择同一个报价。
Next
引用可以在当天开始时随机选择并标记为todays
引用。此任务可以使用CRON
执行,您只需选择标记为todays
的报价(白天)。
答案 6 :(得分:2)
感谢所有答案。我一直在寻找的答案,并不是不幸的。
这就是我解决问题的方法:
我创建了一个名为quote的新表。
它有1行:更新当天最后一个报价的日期和报价本身。 当日期与服务器日期不匹配时,我生成了一个新报价,并使用新报价和新日期更新了表格。如果它与当前日期匹配,则获取报价并显示它。
相当简单的解决方案,但它对我来说非常开箱即用。
答案 7 :(得分:1)
立即获取00:00 unix时间并将其作为$ variable存储在您的代码中。
$id = (time() - $variable) % (24 * 60 * 60);
"SELECT * FROM `quotes` WHERE `id` = {$id}"