Bonjour à toutes et à tous,

Comme d'habitude, je reviens vers vos supers conseils (et compétences) lorsque je chauffe trop sur un probléme...

Voilà ma soucis :

Je devellope un outils de reservation de salles .

J'en suis donc au stade de la requête permettant de savoir si une salle est disponible ou non à une date donnée sur une tranche horaire donnée .

Voici la fonction que j'utilisais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
 
function F_CheckDispo ($BegResa, $EndResa, $EndM, $DateResa, $RoomResa, $Retro, $cnx)
{
	$l_BegResa = $BegResa;
	$l_EndResa = $EndResa;
	$l_EndM  = $EndM;
 
		$l_BegResa[4] = 1;
 
 
		if ($l_EndM == 30)
			{
				$l_EndM = 29 ;
				$l_EndResa = $l_EndResa.":".$l_EndM.":00";
			}
			else
			{
				$l_EndM = 59;
				if (substr($l_EndResa,0,1)== 0 )
				{
					$tmp = intval($l_EndResa[1]);
					$tmp--;
					$l_EndResa[1] = $tmp ;
					$l_EndResa = $l_EndResa.":".$l_EndM.":00";
				}
				else 
				{
				 	$tmp = intval(substr($l_EndResa,0,2));
				 	$tmp -- ;
 
				 	if ($tmp < 10)
				 	{
				 		$l_EndResa = "0".$tmp.":".$l_EndM.":00";	
				 	}
				 	else
				 	{
				 		$l_EndResa = $tmp.":".$l_EndM.":00";
				 	}
 
				}
			}
 
	$qry =  
			"SELECT COUNT(*) FROM ".RESA." ".
			"WHERE NOT(('".$begresa."'< BegRs ".
			"AND '".$endresa."'< BegRs ) ".
			"OR ('".$begresa."'> EndRs ".
			"AND '".$endresa."'> EndRs )) ".
			"AND IdRm =".$idroom." ". 
			"AND DateRs ='".$curyear."-".$curmonth."-".$curday."'";	 		
	//echo "<br>".$qry2;
			$ret = mysql_query ($qry2, $cnx) or die(mysql_error() );
			$col = mysql_fetch_row ($ret) ;
 
	if (isset($col[0]))
	{
 
		return false;
	}
	else 
	{ 
		return true ;
	}
 
}
 
if ( $col[0] ) { 
Alors la salle n'est pas dispo

Au départ j'utilisais seulement la requête suivante

Cette requête est presque parfaite, sauf qu'elle ne permet des reservations contigues , exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
		$qry =  
			"SELECT COUNT(*) FROM ".RESA." ".
			"WHERE NOT(('".$begresa."'< BegRs ".
			"AND '".$endresa."'< BegRs ) ".
			"OR ('".$begresa."'> EndRs ".
			"AND '".$endresa."'> EndRs )) ".
			"AND IdRm =".$idroom." ". 
			"AND DateRs ='".$curyear."-".$curmonth."-".$curday."'";
Malheureusment pour le cas d'une réservation commencant à 09h00 et finissant à 10h00 existant déjà avec cette requête impossible de placer une réservation de 08h00 à 09h00 , 09h00 étant déjà réservé ...

J'ai essayé de palier ce soucis en testant les tranches de réservation sur
- HeureDeb + 1 min - HeureFin - 1 min
Exemple : Un rendez vous pris de 08h00 à 09h00 sera tester sur la tranche 08h01 à 08h59...

D'où les tests et le formatage du départ...

Mais du coup le requête est devenu trop permissive...

J'en appelle donc à vos lumiére , à vos expériences ...

Comment gérer ce cas ?

Une requête est elle suffisante, ou faut-il obligatoirement passé par du code ? ( PHP pour ce qui me concerne)

Merci d'avance pour vos réponses.

Amicalement
Jérémy