キャンペーン追加時に、登録済みのキャンペーンと重複あるかチェックするためのクエリ。
sprintf('((campaign_case_from BETWEEN %s AND %s) OR (campaign_case_to BETWEEN %s AND %s) OR (campaign_case_from <= %s AND %s <= campaign_case_to)) ' , $conn->quote($campaign_case_from) , $conn->quote($campaign_case_to) , $conn->quote($campaign_case_from) , $conn->quote($campaign_case_to) , $conn->quote($campaign_case_from) , $conn->quote($campaign_case_to))
解説:
いずれかの条件がtrueになれば、重複している。
条件1:登録済みキャンペーンの開始日が、これから登録するキャンペーン期間に包含されていないか?
条件2:登録済みキャンペーンの終了日が、これから登録するキャンペーン期間に包含されていないか?
条件3:登録済みキャンペーンの開始日と終了日の間に、これから登録するキャンペーン期間が包含されているか?
Comments
こっちの方がパフォーマンス良さそうだね。
http://d.hatena.ne.jp/deeeki/20080802/termchecksql2