Ray,
Why not just simply give them a list of available times that meet their 
number of days requested starting with the day they ask for.
Would look something like this.
HTH. Dan. Have a great day.
----------------------------------
<?
$req_start_date 
= '2002-04-01';
$req_end_date 
= '2002-04-20';
$limit 
        = 10;           // limit how many are listed
$req_start 
= strtotime($req_start_date);
$req_end 
= strtotime($req_end_date);
$num_days 
= ceil(($req_end - $req_start) / 86400);

<?
$req_start_date 
= '2002-04-01';
$req_end_date 
= '2002-04-20';
$limit 
        = 10;
$req_start 
= strtotime($req_start_date);
$req_end 
= strtotime($req_end_date);
$num_days 
= ceil(($req_end - $req_start) / 86400);

echo "$req_start $req_end $num_days<BR>";

$sql = "
SELECT
DATE_ADD(prev_end.bookin_start, INTERVAL 1 DAY) as available_start,
DATE_SUB(next_beg.bookin_end,   INTERVAL 1 DAY) as available_end,
intervening_book.booking_start 
as intervening_date

FROM bookings as prev_end

LEFT JOIN bookings as next_beg
ON 
next_beg.villa_id = '$req_villa_id'
WHERE 
prev_end.villa_id = '$req_villa_id'
AND (TODAYS(prev_end.booking_end) - TODAYS(next_beg.booking_start) >= 
$num_days
OR pre_end.booking_end is null)

LEFT JOIN bookings as intervening_book
ON 
intervening_book.villa_id = '$req_villa_id'
AND (   intervening_book.booking_end > prev_end.booking_end
AND 
intervening_book.bookeng_start < next_start.booking_start)

WHERE 
prev_end.villa_id = '$req_villa_id'
AND 
intervening_date is null

ORDER BY availabel_start LIMIT $limit
";
?>
----------------------------------------------




Ray Healy ) wrote:
> Hi all
> (details of database at then end of this message)
> 
> I hope someone can give me some advice. I am trying to create a database and
> access via PHP for a friend of mine that has a caravan park. What I want him
> to be able to do is to add bookings for the caravans via a PHP page and for
> clients to be able to search to see if a caravan is available for rent.
> 
> I have created 2 tables and have put data into it via command prompt and
> also retrieved the data from it and carried out a join linking the 2 tables
> together. Which all seems to work well.
> 
> 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.
> 
> I am not sure whether I should be in list list of the PHP list so sorry if I
> have got it wrong.
> 
> Any advice or places to visit would be greatly appreciated.
> 
> Thanks for all your help
> 
> Ray
> 
> 
> Details of what i have done already:
> 
> mysql> use matrix
> Database changed
> 
> mysql>CREATE TABLE bookings (
> -> booking_id SMALLINT (6) NOT NULL AUTO_INCREMENT,
> -> booking_start DATE NOT NULL DEFAULT '0000-00-00',
> -> booking_end DATE NOT NULL DEFAULT '0000-00-00',
> -> villa_id SMALLINT (6) NOT NULL DEFAULT '0',
> -> PRIMARY KEY (booking_id)
> -> );
> 
> mysql>INSERT INTO bookings VALUES (1, '2002-04-01', '2002-04-15', 3);
> mysql>INSERT INTO bookings VALUES (2, '2002-03-23', '2002-04-04', 1);
> 
> mysql>CREATE TABLE villas (
> -> villa_id SMALLINT (6) NOT NULL AUTO_INCREMENT,
> -> vill_name VARCHAR (25) NOT NULL DEFAULT '',
> -> PRIMARY KEY (villa_id)
> -> );
> 
> mysql>INSERT INTO villas VALUES (1, 'Gandy');
> mysql>INSERT INTO villas VALUES (2, 'Hathaway');
> mysql>INSERT INTO villas VALUES (3, 'Healy');
> mysql>INSERT INTO villas VALUES (4, 'Mcleod');
> 
> mysql> SELECT * FROM bookings;
> +------------+---------------+-------------+-----------------+
> | booking_id | booking_start | booking_end | villa_id  |
> +------------+---------------+-------------+-----------------+
> |          1      | 2002-04-01      | 2002-04-15      |        3   |
> |          2      | 2002-03-23      | 2002-04-04      |        1   |
> +------------+---------------+-------------+-----------------+
> 2 rows in set (0.17 sec)
> 
> mysql> SELECT * FROM villas;
> +----------+------------+
> | villa_id | villa_name |
> +----------+------------+
> |        1    | Gandy        |
> |        2    | Hathaway  |
> |        3    | Healy         |
> |        4    | Mcleod      |
> +----------+------------+
> 4 rows in set (0.00 sec)
> 
> mysql> SELECT villa_name, booking_start, booking_end FROM bookings LEFT JOIN
> villas ON bookings.villa_id = villas.villa_id;
> +------------+---------------+--------------------+
> | villa_name | booking_start | booking_end  |
> +------------+---------------+--------------------+
> | Healy       | 2002-04-01     | 2002-04-15      |
> | Gandy      | 2002-03-23     | 2002-04-04      |
> +------------+---------------+--------------------+
> 2 rows in set (0.00 sec)
> 
> 
> 


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

Reply via email to