Autor Zpráva
Tirus
Profil
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?
okolojdouci
Profil *
Myšlenka je mimo, pokud to míníš tak, že dotazem vytáhneš z tabulky všechny akce a porovnávat je budeš v cyklu pomocí php.
Nakresli si časovou osu a na ní si nasimuluj všechny varianty toho, jak se dvě akce můžou křížit a minout. Pak to přepiš do SQL, jde jen o ty operátory, které tady skládáš v php. Jestli máš tu logiku dobře, to se mi teď zkoumat nechce.
Tirus
Profil
okolojdouci:
díky, sedím tu nad tím skoro 4 hodinky (celkem za dnešek)
v php to porovnávat nechci.. tohle je jen nához.. jde mi o to, že když mi to něco z DB vrátí, tak se to s něčím kryje a tak uživateli navrátím, že akce nelze uložit, že se kryje s jinou akcí...
okolojdouci
Profil *
Tirus:
Dělal jsem to dvakrát a vždycky pomohl papír a tužka. Jde jen o porovnání čtyř čísel, resp. o ošetření všech variant, jak dvě dvojice čísel můžou vůči sobě stát. Myslím že to víš, ale nevím, co ti brání v tom napsání. Je to jednodušší, než to po někom cizím kontrolovat.
Tirus
Profil
okolojdouci:
asi blbě chápeš.. ta tužka mne napadla.. už tu mám několik variant a z toho jsem sesmolil ten příklad co je v mém prvním postu a jde mi jen o to, zda by na to někdo nekoukl... nemám to nyní jak otestovat .. a rád bych se pohnul
okolojdouci
Profil *
Tirus:
Aha, tak to jsem opravdu pochopil špatně.
Tirus
Profil
okolojdouci:
je pravda že jsem dřív sem psal snad každou hovadinu, ovšem to jsem se odnačil.. nyní si nad tím raději lámu hlavu sám a pak se raději zeptám zda to dělám správně..
Tirus
Profil
vyřešeno
SELECT *
FROM `web_rent` where ('2012-11-02' <= day_to && '2013-01-02' >= day_from)
&& ('17:00:00' < time_to && '18:30:00' > time_from) 
&& 'Thursday' = day && place_id = 1

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0