Potresti provare questa condizione nella query sul db, se ottieni un risultato allora è occupato:
codice:
dato:
$orario_i; // l'orario cercato di inizio es: 11:00
$orario_f; // l'orario cercato di fine es : 13:15
inizio; // campo orario inizio sul db
fine; // campo orario fine sul db
SELECT ... WHERE
$orario_i BETWEEN inizio AND fine
OR
$orario_f BETWEEN inizio AND fine
OR
($orario_i < inizio AND $orario_f > fine)
Tieni presente che BETWEEN include anche gli estremi (è come fare: fine >= $orario_x <= inizio).
In caso non ti vada bene basta che sostituisci con, esempio
($orario_i > inizio AND $orario_i < fine)
Ovviamente, tutto dipende da come hai salvato sul db il range di orario. Se hai due varchar forse dovrai far un cast sul tipo time.Se si trova tutto su un varchar allora la cosa è più complicata.