kontrola křížení dat
Potřeboval bych nějak udělat kontrolu křížení. Představte si, že máte nějakou akci, která se opakuje každou středu od 20h do 21:30 od 1.11.2011 do 23.12.2011
ta bude v MySQL už uložená a já najednou budu chtít přidat nějakou akci, co bude každou středu od 18:30 do 20h od 20.9.2011 do 6.11.2011
Jak udělat to, abych zkontroloval že se to s něčím nekříží?
napadlo mne něco takovéhleho
($od_nove_cas < $do_v_db || $do_nove_cas > $od_v_db) && ($od_nove_datum < $do_v_db_datum || $do_nove_datum > $od_v_db_datum) && $den_nove_v_tydnu = $den_v_db_v_tydnu
slo by to tak, nebo má myšlenka je mimo? Jde o to, že v DB bude stovky záznamů a potřebuju jejich kontrolu
Není důvod, proč by to nešlo.
takže je to správně? seděl jsem tu nad tím včera asi 3 hodiny a následně se do toho zamotal, proto raději chci názor jiných
Máš obráceně větší a menší.
počkej, já to mám myšleno tak, že když to něco navrátí, tak se to kříží.. právě mám myšlenou kontrolu takto... přidání selže když toto něco navrátí
Kříží se jestliže:
!($do_nove_cas < $od_v_db || $od_nove_cas > $do_v_db) && !($do_nove_datum < $od_v_db_datum || $od_nove_datum > $do_v_db_datum) && $den_nove_v_tydnu = $den_v_db_v_tydnu
takže do SQL by se to dalo přepsat nějak takto?
Tu databázi bych navrhnul obecněji. Proč ukládat 'Thursday' ?
Co když někdo bude chtít se scházet třeba každý třetí den ?
Ukládal bych identifikaci akce a k ní každé datum začátku, datum konce (ta se mohou lišit - co když máme rande přes půlnoc ) , hodinu začátku, hodinu konce ( i ty se mohou termín od termínu u stejné akce lišit ).
no jasně, to chápu
takže dvě tabulky...
v jedné je ta daná akce
a v druhé jsou jejich termíny... ovšem v tom mám větší guláš na ten dotaz :D
nyní jsem vyřešil tento
Za daného návrhu by mělo být lepší
Spravil jsem čas : musíš otestovat, zda se navrhovaný čas ať už svým začátkem nebo koncem nestrefí mezi uložené časy ( překrytí intervalů). Takhle jen testuješ, zda se navrhovaný interval celý nevleze do už obsazeného.
Zrovna tak se dny.
Ještě nerozumím && place_id=1 ( test by asi neměl platit jen pro jednu akci).