我想每天在我的网站上显示报价。 24小时后它应该改变。引号存储在MySQL数据库中。我该如何使用PHP
由于
马修
答案 0 :(得分:3)
最简单的方法是存储报价应该作为mySQL表中的列显示在网站上的那一天,然后查询该特定报价,如
$query = "SELECT * FROM quotes WHERE date = CURDATE();";
如果你没有在数据库中存储日期,那就变得更加困难和复杂 - 你必须显示随机条目,但是要跟踪哪一个被显示,因此相同的引用不会出现两次短暂的继承。一切都可行,但可能比必要的更复杂。
答案 1 :(得分:2)
如果您有一组引号,您可以使用模数来确保当前日期和参考日期之间的差异将落入数据库表格中的引号数量范围。
SELECT *
FROM `quotes`
WHERE id = DATEDIFF( CURDATE( ) , '2010-05-01' ) MOD (SELECT COUNT(*) FROM `quotes`)
答案 2 :(得分:0)
您需要为每24小时运行一次的服务器设置一个cron选项卡。但是,设置它取决于您拥有的服务器。 http://en.wikipedia.org/wiki/Cron了解有关cron的更多信息。如果您正在使用cPanel,www.upstartblogger.com /how-to-create-a-cron-job-in-cpanel可能会对您有所帮助。
答案 3 :(得分:0)
很多方式。
一种方法是在引号表中显示另外两列'isdisplayed'并'显示'。
使用这2个额外字段,您可以跟踪显示的报价以及显示的时间。
答案 4 :(得分:0)
如果您不想使用任何缓存解决方案,并且您不想为每个报价附加将来使用的日期,您可以执行以下操作:
SELECT id, quote FROM quotes WHERE date_used = NOW();
如果返回null,请执行以下操作:
$count = SELECT COUNT(*) FROM quotes WHERE date_used = '0000-00-00'
获取未使用的引号数,然后随机选择一个引号:
$rand = rand (0, $count);
$quote = SELECT id, quote FROM quotes WHERE date_used = '0000-00-00' LIMIT $rand, 1
UPDATE quotes SET date_used = NOW() WHERE id = $quote['id']
答案 5 :(得分:0)
如何使用以下内容:
quotes
------
quote_id
..
.
quote_rota
----------
quote_rota_id
quote_id
date_shown
然后使用如下所示的查询来获取一个不是过去7个引号之一的随机引用:
SELECT * FROM quotes WHERE id=(
SELECT FLOOR(MIN(quote_id)+(RAND()*MAX(quote_id))
FROM quotes
) AND quote_id NOT IN (
SELECT quote_id FROM quote_rota ORDER BY date_shown DESC LIMIT 7
) LIMIT 1;
// process and retrieve quote_id then store in quote_rota
如果您将结果存储在由CRON作业/计划任务填充的文件中,那么只要您愿意(例如24小时,7天,1小时等),您就可以持久保存(
)或者,您可以在报价表中添加一列以表明它是“当前”报价(例如有效),然后使用:
SELECT quote_id FROM quotes WHERE id=(
SELECT FLOOR(MIN(quote_id)+(RAND()*MAX(quote_id))
FROM quotes
) AND quote_id NOT IN (
SELECT quote_id FROM quote_rota ORDER BY date_shown DESC LIMIT 7
) LIMIT 1;
// process and retrieve quote_id then update "current" flag
根据需要经常安排此任务,然后使用以下内容获取引用:
SELECT * FROM quotes WHERE active = 1