> The one thing I cannot get into my head is how can you tell the database
> that all the days between the "start" and "end" dates are booked.
> Also when
> people search for a caravan on a specific date and say they want it for 7
> day the database/PHP checks to see if the entire period is
> totally free for
> them and does not colide with another booking.

Ray, it looks like you've done some great work so far.  This one point that
you are struggling with may not be as difficult as you are imagining as
well.

When a potential customer is searching for availability, they are going to
have to select a start date and an end date for the period they are looking
to book.

Then, you just take those two dates, and compare them against the previous
bookings for the same villa...  (if you do it in one step, you can tell them
"those dates are not available" - if you perform it in two steps, you can
give the customer more information about whether the start date, or the end
date (or both) were the source of the conflict. )  i.e. if they want to book
the Healy on 4/10 - 4/20, it could tell them that it is not available until
4-15... instead of telling them that the dates "just won't work" - does that
make sense?

So, using your example, the Healy is booked from 4/1 - 4/15...

When a customer runs a query to find availability, they will select a
start_date of 4/10 and an end date of 4/20

(hehe, I just said 420...)

[one step method]

(of course convert the requested $start_date and $end_date into YYYY-MM-DD
format)

<?php

$startsql = "   SELECT
                                count(*) as how_many_booked
                        FROM
                                bookings
                        WHERE
                                ((booking_start < '$start_date'
                                        AND
                                booking_end > '$start_date')
                                OR
                                (booking_start < '$end_date'
                                        AND
                                booking_end > '$end_date'))
                        AND
                                villa_id = '$requested_villa_id'";

$query = mysql_query($sql);
$is_it_booked = mysql_fetch_object($query);
print "number of reservations during this date =
".$is_it_booked->how_many_booked;

?>

This checks if the start date is between the booked dates OR the end date is
between the booked dates
If rows are returned, then the dates are not available.

Does this help?

-Mark





-- 
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to