183 文字
1 分
SQLで期間の重複チェック
2010-11-05

キャンペーン追加時に、登録済みのキャンペーンと重複あるかチェックするためのクエリ。

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:登録済みキャンペーンの開始日と終了日の間に、これから登録するキャンペーン期間が包含されているか?

SQLで期間の重複チェック
https://blog.teraren.com/posts/sql-term-duplicate-check/
作者
Yuki Matsukura
公開日
2010-11-05
ライセンス
CC BY-NC-SA 4.0

コメント