Autor | Zpráva | ||
---|---|---|---|
noway Profil |
#1 · Zasláno: 7. 3. 2008, 10:05:56
Dobrý den, potřeboval bych poradit.Do své .bc práce potřebuji rezervace a zasekl jsem se teď na tom testování.vysvětlím názorně.
v databázi mám 3 rezervace: OD - DO 1: 08:00 - 10:00 2:12:30 - 13:30 3:14:00 - 15:30 Tak a řekněme , že chci provést rezervaci od 11:00 do 12:00 nevím jak to mám mezi sebou testovat aby se mi ta rezervace provedla.Řeším teď jen to aby se nekryla s žádnou jinou. Hodnoty mám v poli následovně. $field[]="08:00-10:00" $field[] = array(.....) $time_od=08:00;$time_do=10:00 Shrnutí ... potřebuju aby uděl to že veme uživateluv čas rezervace na který chce rezervaci provést a otestuje ji podle toho co je v databazi jestli ji může nebo nemůže provést.Pro větší přehlednost to napíšu co známe: $field[]="08:00-10:00"; $field[]="12:30-13:30"; $field[]="14:00-15:30"; foreach ($field as $value){ $val = explode("-",$value); $time_from_dbase =$val[0];//tzn.ze toto obsahuje v 1.pruchodu cyklem hodnotu 08:00,ve 2 pruchodu 12:30 $time_to_dbase =$val[1];//tzn.ze toto obsahuje v 1.pruchodu cyklem hodnotu 10:00,ve 2 pruchodu,13:30 atd. Čas zadaný uživatelem je $time_from_user="11:00"; $time_to_user="12:00"; a jak tedy otestuju ze v dobe od 11 do 12 neni zadna rezervace a muze se tedy provest ??? Snad jste to pochopili :-) |
||
noway Profil |
#2 · Zasláno: 7. 3. 2008, 10:24:32
Jako testovani pomoci < > funguje jen se proste nemohu trefit do te spravne kombinace.
|
||
bukaj Profil |
#3 · Zasláno: 7. 3. 2008, 11:20:53
noway
Nešťastně volené formátování času. Porovnávat řetězce, navíc s dvěma údaji v sobě, není vůbec dobré. Možná se to jednodušeji vypisuje, ale to je asi tak všechno. Nejdřív bych tedy doporučil zvolit formát, který půjde jednoduše porovnávat. Zaprvé tedy použít pole s dvěma hodnotami - od, do - místo jednodho řetězce. A ukládat tam časy jako čísla. Pokud nezáleží na datumu, nejjednodušší bude, aby každá minuta ze dne přičetla k číslu jedničku. (Takže např. v 0:00 to bude 0, v 0:01 to bude 1, v 1:00 to bude 60. Princip je doufám jasný. A převodní funkce z dosavadních hodnot je jednoduchá.) A teď jediné, co je potřeba udělat, je najít časy mezi, časy, kdy je volno, a porovnat jestli je náš startovní i konečný čas mezi nimi pomocí porovnávacích operátorů. Pokud máme časy seřazené, je vždy konečný čas předchozího prvku startovním časem volného prostoru a startovní čas nynějšího prvku konečným časem volného prostoru: start | 08:00 | 12:30 | 14:00 ----------------------------- end | 10:00 | 13:30 | 15:30 //což můžeme reprezentovat polem (řekněme, že fce daytime převádí čas ve formě řetězce na číslo): $field = array(array(daytime("8:00"), daytime("10:00")), array(daytime("12:30"), daytime("13:30")) array(daytime("14:00"), daytime("15:30"))); array_multisort($field); //pro jistoru časy ještě seřadíme. Je to opravdu důležité! Nyní potřebujeme zjistit počátek volného času. Nejjednodušší je to z posledního prvku: $last_time = end($field); reset($field); $last_time = $last_time[1]; A teď již jen projdeme pole a kontrolujeme: foreach ($field as $t) { if ($time_from_user >= $last_time && $time_to_user <= $t[0]) { $is_free = true; break; } $last_time = $t[1]; } $is_free = false; //v proměnné $is_free se nyní skrývá booleovská hodnota říkající jestli je nebo není čas volný |
||
Kajman_ Profil * |
#4 · Zasláno: 7. 3. 2008, 11:24:45
Také doporučuji dva různé sloupečky, ale spíš bych je nechal jako datetime. Pak je kolize jednoduché hledat...
http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=28&topic=6 9880 |
||
noway Profil |
#5 · Zasláno: 7. 3. 2008, 11:26:34
jen pro upřesnění v Databazi je cas reprezentovany jako TIME a jsou tam 2 sloupecky a to time_from a time_to pomuze to nejak ?
|
||
noway Profil |
#6 · Zasláno: 7. 3. 2008, 11:36:38
z toho vyplyva ze uplne presne jsou ty casy v databazi jako : 08:00:00 a ve 2 sloupecku 10:00:00
|
||
panhuhu Profil |
#7 · Zasláno: 7. 3. 2008, 12:13:48 · Upravil/a: panhuhu
noway
select ... where time_from < $time_from_user and time_to > $time_from_user select ... where time_from < $time_to_user and time_to > $time_to_user osobně bych jenom porovnal zda-li se start nebo konec rezervace nenachazi uz v nekterem z intervalu ------ Edit: vlastne by stacil jenom 1 select |
||
Kajman_ Profil * |
#8 · Zasláno: 7. 3. 2008, 12:30:42
vypíše kolize
select t.* from tabulka t where t.time_from<'$vkladane_to' and t.time_to>'$vkladane_from' |
||
panhuhu Profil |
#9 · Zasláno: 7. 3. 2008, 12:40:41
Kajman_
přesně tak |
||
noway Profil |
#10 · Zasláno: 7. 3. 2008, 12:54:51
Absolutely FANTASTICK!!!DIIIIIIIIKYYYYYYYYYYY MOOOOOOOCCCCC.Zadne slozite php funkce ale naprosto jednoduse ... uplne supr.fakt dik!dik dik diiik zatim funguje jak ma .. nejsem schopen prijit na nic co by mi neslo :-)
|
||
Časová prodleva: 16 let
|
0