183 文字
1 分

SQLで期間の重複チェック

2010-11-05
2019-04-25

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

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

この記事が役に立ったら
GitHub Sponsorsで応援できます

コメント