Archive Builder PHP

时间:2009-07-27 05:48:47

标签: php mysql database-design architecture archive

在我开始身份之前,我想将此问题更多地发布为讨论而不是问题。

在我的数据库中我有新闻帖子可以说3列(标题,标题,日期)。 Wher Id和title是self Explanitory,日期存储在mktime()值中,换句话说就是1970年1月1日以来的秒数。

现在我要做的是建立一个将显示的存档链接

  • 2009年7月
  • 2009年6月
  • 2009年3月
  • 2009年2月
  • 2008年12月

请注意,不会显示没有帖子的月份。

现在我最初想的是

  1. 从当月的最后一天开始
  2. 并获取当月第一天的价值
  3. 对于日期> = First_Day_Seconds和date< = Last_Day_Seconds
  4. 的帖子执行MySQL COUNT查询/ mysql_num_rows
  5. 在数组中显示或放置值
  6. 执行另一个查询以检查是否找到更多值WHERE date< First_Day_Seconds(如果没有找到行,则中断)
  7. 现在上面的内容只是我的头脑。但如果你有任何想法加快这个过程,请分享。

    提前说,日期需要采用mktime格式

2 个答案:

答案 0 :(得分:3)

我建议使用数据库“本机”时间格式,但它也适用于UNIX时间戳。

您可以这样做:

SELECT DISTINCT FROM_UNIXTIME(date, '%M %Y') FROM posts;

可选择使用WHERE条款将日期限制为过去或将来的日期。可能是一个ORDER条款。这应该是所有需要的,让数据库做尽可能多的工作。

如果您需要更多格式选项,请选择"%Y-%m"的日期,并在PHP中格式化:

date($myCustomFormat, strtotime("$date-01"));

答案 1 :(得分:0)

您可以使用此查询获得多年

"SELECT *,content_id,COUNT(content_id) AS itemCount FROM content_mast GROUP BY DATE_FORMAT(date_upload,'%Y') DESC";

现在使用可以使用此查询获取当年的月份

$tday = date("Y", $datetime);
$s1="select * from content_mast where DATE_FORMAT(date_upload,'%Y')=$tday";