【问题标题】:Archive Builder PHP存档生成器 PHP
【发布时间】:2010-11-14 06:26:47
【问题描述】:

在我开始之前,我想说我将这个问题发布为更多的讨论而不是问题问题。

在我的数据库中,我的新闻帖子可以说是 3 列(ID、标题、日期)。如果 Id 和 title 是自解释的,则日期存储在 mktime() 值中,即自 1970 年 1 月 1 日以来经过的秒数。

现在我想做的是建立一个存档链接,将显示为这样

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

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

现在作为我最初的想法

  1. 从当月的最后一天开始
  2. 并获取当前月份第一天的值
  3. 对日期 >= First_Day_Seconds AND 日期 的帖子执行 MySQL COUNT Query/mysql_num_rows
  4. 显示或将值放入数组中
  5. 执行另一个查询以检查是否找到更多值 WHERE date

现在以上只是我的想法。但是,如果您有任何想法可以加快此过程,请分享。

会提前说,日期需要mktime格式

【问题讨论】:

  • ooo 有两个人喜欢这个。 :D

标签: php mysql database-design architecture archive


【解决方案1】:

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

你可以这样做:

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

可以选择使用WHERE 子句将日期限制为过去或未来的日期。可能会添加一个ORDER 子句以作好衡量。这应该是几乎所有需要的,让数据库做尽可能多的工作。

如果您需要更多格式选项,请选择带有"%Y-%m" 的日期,然后在 PHP 中进行格式设置:

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

【讨论】:

  • 干得好...我刚刚运行了那个查询,哇!
【解决方案2】:

您可以使用此查询来获取年份

"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";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-22
    • 2015-10-27
    • 2021-06-21
    • 2016-10-23
    • 1970-01-01
    • 2020-02-06
    • 2017-09-03
    • 1970-01-01
    相关资源
    最近更新 更多