Io farei così:
Dando per scontato che hai un sistema per impedire un overbooking al momento della prenotazione.
1 ti prendi le prenotazioni per il mese corrente.
2 Metti in un array la coppia giorno => numero di prenotazioni. Visto che hai due sole stanze varrà al max 2.
3 Se il giorno (del calendario) è presente nell array ed il valore è 2, lo metti in rosso.
Tra l'altro nel tuo codice rifai la (stessa) query nel clico for...ed non ha senso.
Quindi:
Codice PHP:
function prenotazione($mese){
$giorni = array();
$db = new MySQL();
if (! $db->Query("SELECT str_data, dataFine FROM bebcalendario WHERE MONTH(str_data) = $mese OR MONTH(dataFine) = $mese"))
echo $db->Kill();
while($row = $db->Row() ){
// Sono timestamp
$str_data = $row->str_data;
$dataFine = $row->dataFine;
while($str_data <= $dataFine){
if(date('m', $str_data) == $mese){
if(!isset($giorni[$str_data]))
$giorni[$str_data] = 0;
$giorni[$str_data] ++;
}
$str_data += (60 * 60 * 24);
}
}
return $giorni;
}
A questo punto nella funzione dove crei il calendario basta che vedi se il giorno è presente su $giorni ed è = 2
Codice PHP:
function showCalendar($m, $y){
$compare = prenotazione($m);
...
...
$color = '#fff';
if(isset($compare[$data]) && $compare[$data] == 2)
$color = '#be1e2d';
$label = ($data != $oggi) ? $day : '<b>'.$day.'</b>';
echo "<td style='color:$color'>".$label."</td>";
...
}
Ps: In questo caso non ho cosiderato l'anno. Inoltre la query non ti prende le prenotazioni che durano più di un mese