0

イベントを表示する PHP アプリケーションに取り組んでいます。訪問者がイベントを表示する月を選択できる選択ボックスを生成します。

私の問題は、イベントが開始または終了する月だけでなく、イベントがまだ行われている月も表示する必要がある選択ボックスに関するものです (数か月前に開始し、数か月後に終了する場合でも)。

これは私が現時点で持っているものです。これは非常に基本的で、イベントが開始される月のみを返します。

SELECT 
  DISTINCT DATE_FORMAT(start,'%M %Y') as prettydate, 
  DATE_FORMAT(start,'%m%Y') as monthyear 
FROM 
  `events` 
WHERE 
  start >= NOW() 
ORDER BY 
  start ASC;

たとえば、2014 年に取得した唯一のイベントが 2 月に開始され、7 月に終了する場合、2 月と 7 月だけでなく、2014 年 3 月、4 月、5 月、6 月も取得するにはどうすればよいですか?

よろしくお願いします。

4

2 に答える 2

2

1 年を超えるイベントはなく、次の開始日と終了日を使用すると仮定します。

('2012-01-01','2012-01-31'),
('2012-03-01','2012-03-31'),
('2012-05-01','2012-06-01'),
('2012-07-01','2012-07-31'),
('2012-09-01','2012-10-31'),
('2012-11-01','2012-11-30');

このクエリ:

SELECT DISTINCT
  DISTINCT DATE_FORMAT(e.start + INTERVAL ids.id MONTH,'%M %Y') as prettydate, 
  DATE_FORMAT(e.start + INTERVAL ids.id MONTH,'%m%Y') as monthyear 
FROM 
(
  SELECT 0 AS id
  UNION SELECT 1
  UNION SELECT 2
  UNION SELECT 3
  UNION SELECT 4
  UNION SELECT 5
  UNION SELECT 6
  UNION SELECT 7
  UNION SELECT 8
  UNION SELECT 9
  UNION SELECT 10
  UNION SELECT 11
) ids,
  events e
WHERE
  EXTRACT(YEAR_MONTH FROM e.start + INTERVAL ids.id MONTH) <=
  EXTRACT(YEAR_MONTH FROM e.end)
ORDER BY 
  e.start + INTERVAL ids.id MONTH

戻ります:

prettydate      monthyear
January 2012    012012
March 2012      032012
May 2012        052012
June 2012       062012
July 2012       072012
September 2012  092012
October 2012    102012
November 2012   112012

実際の例については、 http://sqlfiddle.com/#!2/12b08/3を参照してください。

于 2012-10-11T17:01:37.343 に答える
0

各イベントの開始日と終了日を選択します。終了日を取得したら、イベントの開始と終了の間にある月を計算できます。

http://php.net/manual/en/function.date.phpを使用してみてください

それまたは独自のフォーマットを使用して、開始日の月と年が終了月と年と同じかどうかを確認できます。そうでない場合は、単にリストに記入してください。たとえば、事前定義された月の配列としましょう。

$months = array(1 => "Jan", 2 => "Feb", ... , 12 => "Dec");

次に、次のようなことができます。そこから、その間の月数を計算し、単純に $months 配列を反復処理できます。

于 2012-10-11T16:33:37.623 に答える