每周从MySQL数据库中的固定数量的更新中释放更新

时间:2013-01-01 01:55:09

标签: php mysql database

我有一个包含200个更新的存档网站,其信息都存储在MySQL数据库中。

我想在网站上显示固定数量的数字,比如说52,每周轮换一次,另一次旋转,总是保持52的总数。

这不是更新数据库的问题,而是修复了这些信息。这是在网站本身上一次显示来自数据库52的更新的“循环”的问题。我正在绞尽脑汁试图找出问题。

到目前为止,我还没有尝试任何东西,因为我想出的任何事情都没有意义。

根据我自己的研究和研究,将信息作为开始日期和结束日期硬编码到数据库表中(对我而言)是一种愚蠢的方式。这个更新的数量是固定的,我只是想让它们永远显示52个,每周五说。

我有一个运行PHP 5.3.20的专用服务器,MySQL / MySQLi是5.5.27(我在MySQLi中编码)。

无论我在哪里,或者我深入研究我的书籍,我都找不到这个问题的答案。任何帮助都将受到慷慨的赞赏!

3 个答案:

答案 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或使用时间戳来获取最新的行。