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 :
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é ...
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."'";
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






Répondre avec citation









Partager