Autor Zpráva
pe3k
Profil *
Zdravim, nie som si isty ci som si navrhol strukturu spravne, ale je nasledovna:

tabulka 'data' obsahuje udaje .... id, ..., start_time, end_time ... posledné dve sú typu TIME

pri vkladaní nového záznamu potrebujem overiť, či je vkladaný čas ešte voľný .... ak áno záznam sa vloží ak nie, nevloží.

v tabulke data mam napr. údaje:
ID| start_time| end_time
1 | 11:00:00 | 12:30:00
2 | 13:00:00 | 14:00:00
3 | 15:30:00 | 16:30:00

idem vvlozit záznam novy .... 10:30:00 - 11:30:00
a potrebujem, overit či už existuje obsadený čas v DB, aby som mohol zapísať novy záznam alebo nemohol ...

ako zapísať select dotaz na overenie tejto situácie, či je voľný termín alebo nie, časové intervaly nie sú pevné stanovené, teda pokiaľ je voľný čas, zapisujem dáta, teda vstupné údaje môžu zasahovať napr. len 5 minut cez obsadený čas, už musím dostať "pozitívny" select že v tabuľke už je toto miesto obsadené ....
Alphard
Profil
Máte tam i datum, nebo vás nezajímá? Jde mi hlavně o to, jestli je třeba řešit časy jako od 22:50 do 0:15.

Edit: Případní hledači, přejděte rovnou na [#8] Kajman. Jednoduché a prosté :-)
pe3k
Profil *
prechod medzi dňami netreba riešiť,
ten dotaz nefunguje presne podla predstav ......... nevyberie tie "spravne" udaje, ak zadam rovnake udaje 2 a viac krat, spomenuty dotaz neselectne uz existujuci zaznam ,teda dalsi dotaz na vlozenie sa mi vykona, aj ked je tam uz ten "cas" obsadeny
Alphard
Profil
Na to jsem pozapomněl, zkoušel jste upravit rovnosti na <= a >=?
Pozapomněl jsem na víc věcí.
pe3k
Profil *
ano, ked rovnosti upravim tak je zase problem ze mi nedovoli zapisat ani "susediace" terminy .... teda obsadeny je 11:00-12:00 .... a dalsi 12:00-... mi nedovoli zapisat, lebo sa tvari ze je "obsadeny" :) mozno staci trochu matematickej logiky do toho, len akosi sa nechytam
Alphard
Profil
Zapomněl jsem teď na něco?
Mělo by být pokryto:
- akce začínající v obsazeném intervalu
- akce končící v obsazeném intervalu
- delší akce zcela překrývající obsazený interval nebo akce ve stejném čase

select count(*) from tabulka where (new_start > start and new_start < end) or (new_end < end and new_end > start) or (new_start <= start and new_end >= end)
pe3k
Profil *
neviem ci som vyskusal vsetky mozne kombinacie, ale snad ano, a vsetko je OK tak ako ma byt,
dakujem
Kajman_
Profil *
Podmínku je možné zapsat jednodušeji...
select count(*) from `data`
where `start_time`<'$new_end' and `end_time`>'$new_start' 

Viz.
http://diskuse.jakpsatweb.cz/?action=vthread&forum=28&topic=108742
http://diskuse.jakpsatweb.cz/?action=vthread&forum=28&topic=69880

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0