我有一个包含200个更新的存档网站,其信息都存储在MySQL数据库中。
我想在网站上显示固定数量的数字,比如说52,每周轮换一次,另一次旋转,总是保持52的总数。
这不是更新数据库的问题,而是修复了这些信息。这是在网站本身上一次显示来自数据库52的更新的“循环”的问题。我正在绞尽脑汁试图找出问题。
到目前为止,我还没有尝试任何东西,因为我想出的任何事情都没有意义。
根据我自己的研究和研究,将信息作为开始日期和结束日期硬编码到数据库表中(对我而言)是一种愚蠢的方式。这个更新的数量是固定的,我只是想让它们永远显示52个,每周五说。
我有一个运行PHP 5.3.20的专用服务器,MySQL / MySQLi是5.5.27(我在MySQLi中编码)。
无论我在哪里,或者我深入研究我的书籍,我都找不到这个问题的答案。任何帮助都将受到慷慨的赞赏!
答案 0 :(得分:2)
我会尝试创建一个函数来计算自某个日期以来的周数,然后从db查询中添加一个偏移量:
<?php
$starttime = strtotime("28 December 2012"); // a recent Friday
$week = 7 * 24 * 60 * 60; // time value of a week
$posts = 200; // number of posts in your db
$limit = 52; // number of shown posts
$offset = floor((time()-$starttime)/$week); // rounds down difference in weeks from startdate until now
while ($offset>$posts-$limit) $offset = $offset - ($posts-$limit);
// this will make the cycle start over when you have reached the end (ie offset 148)...
?>
然后在查询中使用偏移和限制的返回值:
'SELECT ... LIMIT '.$offset.','.$limit;
答案 1 :(得分:1)
好的,这是一个很难的,如果你有mysql 5.5.6,你实际上可以直接指定一个用户变量来执行此操作:
SET @week_nr = WEEK(NOW());
然后这样做:
SELECT * FROM updates LIMIT 52 OFFSET @week_nr;
本周将是第0周。
但是对于较低版本due to this bug而言,这不适用于2005 btw ...
有一种方法可以通过使用预准备语句来绕过其他mysql的限制,如seen in the mysql forums。但该查询每周将抵消1次。
快速相当于jtheman的解决方案就像:
SET @offset = FLOOR(UNIX_TIMESTAMP() - (WEEK("2012-12-28")
/ ( 7 * 24 * 60 * 60)));
但是你可以在这里看到DateTime还有另一个你可以使用的功能:
SET @week_nr = YEARWEEK(NOW());
这是年度证明。
答案 2 :(得分:0)
标记数据库行的时间和自动增量将是您的朋友。如果你想让sql每个星期五运行,你需要设置一个cron作业。
对于sql,选择DESC中的行并将数字限制为52或使用时间戳来获取最新的行。