基于学年的 PHP 和 MySQL 存档

标签 php mysql date archive

<小时/>

我需要帮助创建基于学年的帖子文件。我已经成功地在这个website的帮助下创建了一个正常的存档。 。我仍然是一个 PHP 新手,感觉我错过了一些对于普通后端开发人员来说可能显而易见的东西。

这是我的存档当前的树形 View :

  2013

  April
      Post Title
  March
      Post Title
  February
      Post Title
      Post Title
      Post Title
  January
      Post Title
      Post Title
      Post Title

  2012

  December
      Post Title
      Post Title
      Post Title
  November
      Post Title
      Post Title
      Post Title

我忍不住觉得它已经快到了,但我不知道如何让网站知道要显示哪些日期范围。我尝试的一件事是添加此查询:

$result = mysql_query("SELECT * FROM table WHERE table_date BETWEEN '2012-08' and '2013-07'") or die(mysql_error());

它有效,而且几乎就是我想要的......但我不想为每个学年添加查询直到时间结束!必须有一种比每年手动添加这些范围更好的方法。

编辑:这是我当前的代码。它给我错误“ undefined index :hound_date”

$result = mysql_query("SELECT CONCAT(   YEAR(hound_date-INTERVAL 7 MONTH),'-', 
                1+YEAR(hound_date-INTERVAL 7 MONTH))  AS 'academic year',
        COUNT(*) AS 'number of events'
   FROM hound
  GROUP BY CONCAT(   YEAR(hound_date-INTERVAL 7 MONTH),'-', 
                   1+YEAR(hound_date-INTERVAL 7 MONTH))") or die(mysql_error());




// An array to store the data in a more managable order.
$data = array();

// Add each entry to the $data array, sorted by Year and Month
while($row = mysql_fetch_array($result))
    {
    $hound_date=my_date($row['hound_date']);
    list($year,$month)=explode(" ", $hound_date);

    $data[$year][$month][] = $row;




    }   


    // Go through each Year and Month and print a list of entries, sorted by month.
    foreach($data as $_year => $_months)
        {
        echo '<hr/>';
        echo "<h2>{$_year}</h2>";
        foreach($_months as $_month => $_entries)
            {
            echo '<hr/>';
            echo "<h3>{$_month}</h3>";
            echo "<ul>";
            foreach($_entries as $_entry)
                {
                echo '<li><a href="/?story='.$_entry["hound_id"].'">'.$_entry["hound_name"].'</a> </li>';

                }
            echo "</ul>";

            }
        }

任何帮助将不胜感激!

最佳答案

要做的第一件事是决定如何定义您的学年。它们的定义似乎如下:

2012年8月1日至2013年7月31日为2012-2013学年

也就是说,学年从第七个月开始算起。

如果是这种情况,那么您可以使用此 MySQL 表达式将任何特定日期列转换为文本字符串,例如“2012-2013”​​,表示该日期发生的学年。

CONCAT(YEAR(datecol-INTERVAL 7 MONTH),'-', 1+YEAR(datecol-INTERVAL 7 MONTH))

例如,您可以编写这样的查询来计算每个学年的行数。

 SELECT CONCAT(   YEAR(datecol-INTERVAL 7 MONTH),'-', 
                1+YEAR(datecol-INTERVAL 7 MONTH))  AS 'academic year',
        COUNT(*) AS 'number of events'
   FROM table
  GROUP BY CONCAT(   YEAR(datecol-INTERVAL 7 MONTH),'-', 
                   1+YEAR(datecol-INTERVAL 7 MONTH))

重点是,使用 - INTERVAL 7 MONTH 进行一点日期算术,应该可以很好地将日历年转换为学年。

关于基于学年的 PHP 和 MySQL 存档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15977161/

相关文章:

php - 在php mysql中动态生成链接

mysql - 最后插入的 id 与 Lumen/Laravel 的内部交易

c# - 如何从周数和工作日 C# 获取日期

php - 存储 mysql 行的访问权限

php - 如何发送ANY操作数mysql

php - 在 gearman 工作人员之间共享 curl 处理程序

PHP strtotime() "first monday february"如果 2 月 1 日是星期一,则返回第二个星期一

javascript - 如何从 webcrypto AES-GCM 加密中获取标签

mysql转储: Error 1317: Query execution was interrupted while running database Backup

php - 仅从数据库中获取时间戳日期