[mysql] tester chevauchement entre deux periodes

tester chevauchement entre deux periodes [mysql] - PHP - Programmation

Marsh Posté le 08-09-2006 à 02:35:32    

Ola,
 
Je cree un petit module permettant l'ajout de bannieres pour une periode donnee.
 
Lors de l'ajout d'une banniere, je voudrais tester via une requete mysql si pour la periode pour laquelle je souhaite ajouter mon entree dans ma base, une banniere existe deja, afin que pour une periode donne seule une banniere n'existe.
 
Par exemple, si je veux faire un INSERT pour une periode allant du 14 au 30 septembre, je cherche a verifier si dans ma base aucune entree ne couvre cet intervalle de date.
 
Ma base contient 4 champs:  
 
id | banner_img | start_date | end_date
 
 
 
Voici les 4 cas possibles que je dois tester :
 
 
|-------|
|-------|
 
 
    |--------|
|------|
 
 
|-------|
   |---|
 
 
|-------|
    |-------|
 
 
J'aimerais savoir si en une seule requete je peux tester tous ces cas de figure ? SI ca me retourne 0, comme ca je serai tranquille pour ajouter mon entree sans me soucier d'un chevauchement eventuel...
 
J'ai fait quelques essais mais je narrive pas a gerer tous les cas de figure en une seule requete :/
Des idees ?
 
Merci d'avance


---------------
Expatrie a Jakarta (Indonesie) depuis fevrier 2006.
Reply

Marsh Posté le 08-09-2006 à 02:35:32   

Reply

Marsh Posté le 08-09-2006 à 07:36:51    

Code :
  1. select id
  2. from bannieres
  3. where start_date between '2006-09-14' and '2006-09-30'
  4. or end_date between '2006-09-14' and '2006-09-30


 
si tu ne recupere aucun resultat tu peux faire ton insert


Message édité par betsamee le 08-09-2006 à 07:37:25
Reply

Marsh Posté le 08-09-2006 à 10:26:53    

ah merci, j'avais completement oublie BETWEEN. merci pour la reponse, rapide qui plus est :)
 

Reply

Marsh Posté le 08-09-2006 à 10:52:58    

tu aurais aussi pu faire sans between avec :

Code :
  1. where (start_date >= '2006-09-14' and start_date <= '2006-09-30') or (end_date >= '2006-09-14' and end_date <='2006-09-30)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed