0

学年に基づいて投稿のアーカイブを作成するのに助けが必要です。このウェブサイトの助けを借りて、通常のアーカイブを作成することができました。私はまだ PHP の初心者であり、平均的なバックエンド開発者にとって明らかな何かが欠けているように感じます。

これは、私のアーカイブが現在どのように見えるかのツリー ビューです。

  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

もうすぐそこにあるように感じずにはいられませんが、どの日付範囲を表示するかをサイトに知らせる方法がわかりません. 私が試したことの1つは、このクエリを追加することでした:

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

それは機能し、ほとんど私が望んでいたものです...しかし、時間の終わりまですべての学年にクエリを追加したくありません! これらの範囲を追加するには、毎年手動で行うよりも優れた方法が必要です。

編集:これが私の現在のコードです。「未定義のインデックス: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>";

            }
        }

どんな助けでも大歓迎です!

4

1 に答える 1

1

最初に行うことは、学年をどのように定義するかを決定することです。以下のように定義されているようです。

2012 年 8 月 1 日から 2013 年 7 月 31 日までが 2012 ~ 2013 年度です。

つまり、学年は7月の初めから始まります。

その場合は、この 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暦年を学年にうまく変換する必要があるということです。

于 2013-04-12T17:29:10.913 に答える