Identification des plages de dates qui se chevauchent dans MySQL
Problème :
Considérons une table qui stocke sessions événementielles avec leurs dates de début et de fin respectives. Nous visons à garantir qu’il n’y a pas de conflits entre les sessions. Plus précisément, nous souhaitons trouver des sessions qui se chevauchent lorsque nous essayons d'insérer une nouvelle session dans une plage de dates donnée.
Requête :
Pour identifier les conflits potentiels, nous pouvons utiliser l'outil requête suivante :
SELECT * FROM session WHERE "2010-01-05" BETWEEN start_date AND end_date OR "2010-01-25" BETWEEN start_date AND end_date OR "2010-01-05" >= start_date AND "2010-01-25" <= end_date;
Comprendre la requête :
Cette requête vérifie trois conditions qui indiquent des chevauchements potentiels :
Approche alternative :
Une requête alternative qui garantit des résultats précis :
SELECT * FROM session WHERE new_start < existing_end AND new_end > existing_start;
Explication :
Cette requête utilise une évaluation logique basée sur quatre variables :
La requête renvoie des sessions qui se chevauchent si la date de début de la nouvelle session est antérieure à la date de fin d'une session existante, ET la date de fin de la nouvelle session est après la date de début de toute session existante.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!