Encontrará que es bastante difícil generar una lista de días disponibles en MySQL. En su lugar, le recomiendo que seleccione una lista ordenada de días reservados dentro de su mes deseado, luego recorra todos los días de ese mes en PHP omitiendo el día si coincide con el próximo día reservado de su consulta MySQL. La respuesta a esta pregunta lo ayudará a construir las fechas en las que desea realizar un bucle en PHP. En pseudocódigo:
$booked_days = sql(select all booked days in month order by day);
for each $day in month {
if $day != current($booked_days) {
// $day is not booked
} else advance_next($booked_days);
}
Para verificar si es posible una nueva reserva, puede consultar mi respuesta a una pregunta muy similar hoy más temprano.