2010-12-02 17 views
1

テーブルには、開始日と終了日を含む複数の行があります。ユーザーには、その年の毎月のチェックボックスがあります。ユーザーの選択した月のいずれかを含む日付範囲がどの行に含まれているかを判断する必要があります。MySQL - 月のリストに一致する日付範囲を見つける

開始月の終了月をたとえばMONTH(start_date) IN ($month_list)で確認するのは簡単ですが、この方法では2つの日付間の月は一致しません。

だから、私は尋ねていることは、純粋にSQLで日付範囲から包括的な月を得る方法があるということです。

答えて

0

このようなことができますか?

WHERE 
    MONTH(start_date) < MONTH_YOU_ARE_CHECKING and 
    MONTH() > MONTH_YOU_ARE_CHECKING 

あなたはすべての月のリストを行うとした後、ユーザーが選択したことを、月のリストから削除し、リストと比較した後ことができ、一度にすべてをチェックする必要がある場合。これは、擬似コードの例と良いでしょう:)

MONTHS = 1,2,3,4,5,6,7,8,9,10,11,12 
USER_SELECTED_MONTHS= 1,6,8,9,12 
LIST_TO CHECK = 2,3,4,5,7,10,11 

ので、今あなたが行うことができます:

MONTH(start_date) NOT IN (2,3,4,5,7,10,11) 

あなたはどう思いますか、それはあなたを助けることができますか?

よろしく

0

私はあなたの日付範囲スパンまたは選択した期間と交差するデータ行を含めるしたいと仮定 - その場合には、私はテーブルにユーザーが選択した期間を突き出すとファジーにしてくださいジョイン、ここでは作業量を最小限に抑え

SELECT DISTINCT at.* 
FROM a_table at, user_periods up 
WHERE at.start_date<=up.end_date 
AND at.end_date>=up.start_date 
AND up.trans_id=$SOME_VAR 

(TRANS_IDだけのテーブルを複数の操作に使用することができます)

.....のようなもの、user_periodsテーブルはSTART_DATEとEND_DATEにインデックスを持つ必要があります、a_taと同様ですble。

関連する問題