0

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

我想在网站上显示它们的固定数量,比如 52 个,并且每周轮换一个,另一个轮换一个,始终保持总数为 52。

这不是更新数据库的问题,该信息是固定的。这是在网站本身上一次显示来自数据库52的更新的“循环”的问题。我绞尽脑汁想弄清楚这个问题。

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

根据我自己研究和解决的问题,将信息作为开始日期和结束日期硬编码到数据库表中(对我来说)是一种愚蠢的方式。这个更新数量是固定的,我只是希望它们永远一次显示 52 个,比如每个星期五。

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

无论我在哪里看,或者我深入研究我的书,我都找不到这个问题的答案。任何帮助将不胜感激!

4

3 回答 3

2

我会尝试创建一个函数来计算自某个日期以来的周数,然后将偏移量添加到您的数据库查询中:

<?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;
于 2013-01-01T02:33:39.260 回答
1

Ok, this is a hard one, if you have mysql 5.5.6, you could actually directly assign a user variable to do this:

SET @week_nr = WEEK(NOW());

And then do this:

SELECT * FROM updates LIMIT 52 OFFSET @week_nr;

That would be week 0 this week.

But that doesn't work for lower versions due to this bug, from 2005 btw...

There is a way to circumventing this limitation for other mysql, as seen in the mysql forums by using a prepared statement. But that query will offset by 1 every week.

The quick equivalent of jtheman's solutions would be like:

   SET @offset = FLOOR(UNIX_TIMESTAMP() - (WEEK("2012-12-28") 
                 / ( 7 * 24 * 60 * 60))); 

But as you can see here DateTime there is another function you could use:

SET @week_nr = YEARWEEK(NOW());

And that is year proof.

于 2013-01-01T02:19:32.793 回答
0

时间标记你的数据库行和自动增量将是你在这件事上的朋友。如果您希望每个星期五运行 sql,您将需要设置一个 cron 作业。

对于 sql,选择 DESC 中的行并将数量限制为 52 或使用时间戳获取最新的行。

于 2013-01-01T02:07:49.077 回答