首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于学年的PHP和MySQL档案

基于学年的PHP和MySQL档案
EN

Stack Overflow用户
提问于 2013-04-12 17:11:01
回答 1查看 1K关注 0票数 0

我需要帮助创建一个基于学年的职位档案。在这个website的帮助下,我成功地创建了一个普通的归档文件。我仍然是一个PHP新手,我觉得我错过了一些可能对普通后端开发人员来说很明显的东西。

下面是我的归档文件当前样子的树视图:

代码语言:javascript
复制
  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

我情不自禁地感觉就快到了,但我不知道如何让网站知道要显示的日期范围。我尝试过的一件事是添加了这个查询:

代码语言:javascript
复制
$result = mysql_query("SELECT * FROM table WHERE table_date BETWEEN '2012-08' and '2013-07'") or die(mysql_error());

成功了这几乎是我想要的..。但我不想为每个学年添加查询,直到时间结束!必须有一种更好的方法来添加这些范围,而不是每年都手动进行。

编辑:这是我的当前代码。它给了我错误“未定义的索引: hound_date”

代码语言:javascript
复制
$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>";

            }
        }

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2013-04-12 17:29:10

首先要做的是决定你的学年是如何定义的。它们的定义似乎如下:

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

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

如果是这样的话,那么您可以使用这个MySQL表达式将任何特定的日期列转换为一个文本字符串,比如表示其发生的学年的“2012-2013年”。

代码语言:javascript
复制
CONCAT(YEAR(datecol-INTERVAL 7 MONTH),'-', 1+YEAR(datecol-INTERVAL 7 MONTH))

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

代码语言:javascript
复制
 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的小日期算法应该可以很好地将日历年转换为学年。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15977161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档