0

始める前に、私はこの質問を問題の質問ではなく、より多くの議論として投稿したと言いたいです。

私のデータベースには、3つの列(ID、タイトル、日付)で言うニュース投稿があります。Id と title が自己説明である場合、日付は mktime() 値、つまり 1970 年 1 月 1 日から経過した秒数に格納されます。

今私がやりたいことは、そのように表示されるアーカイブリンクを構築することです

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

投稿がなかった月は表示されませんのでご注意ください。

今、最初の考えとして、私は考えていました

  1. 当月の最終日から開始
  2. そして、現在の月の最初の日の値を取得します
  3. date >= First_Day_Seconds AND date <= Last_Day_Seconds の投稿に対して MySQL COUNT Query/mysql_num_rows を実行します
  4. 配列に値を表示または配置する
  5. 別のクエリを実行して、さらに値が見つかったかどうかを確認します WHERE date < First_Day_Seconds (行が見つからない場合は中断)

今、上記は私の頭の上にあるものです。しかし、このプロセスをスピードアップするためのアイデアがあれば、共有してください.

前もって、日付は mktime 形式である必要があります

4

2 に答える 2

2

データベースの「ネイティブ」時刻形式を使用することをお勧めしますが、UNIX タイムスタンプでも機能します。

あなたは簡単に行うことができます:

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

必要に応じてWHERE、日付を過去または将来の日付に制限する句を使用します。おそらく、ORDER適切な措置のために投入された条項です。データベースに可能な限り多くの作業をさせてください。

さらに書式設定オプションが必要な場合は、"%Y-%m"代わりに日付を選択し、PHP で書式設定します。

date($myCustomFormat, strtotime("$date-01"));
于 2009-07-27T06:26:07.583 に答える