183 文字
1 分
SQLで期間の重複チェック
キャンペーン追加時に、登録済みのキャンペーンと重複あるかチェックするためのクエリ。
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/