Brilliant ! thank you so much!
only one more question: INNER JOIN is not a good choose because it lists only the record with a matching ON clause, and this is the only difference between LEFT and INNER, correct?
thanks again,
Giulio
Il giorno 29/lug/04, alle 16:03, [EMAIL PROTECTED] ha scritto:
Assume you want to check the availability of a room between two dates. You
only want to get the rooms that are available for the entire time from
@startdate to @enddate
set @startdate='some_start_date', @enddate='some_end_date'
SELECT r.room_number, r.room_type
FROM rooms r
LEFT JOIN reservations rv
on rv.room_ID = r.id
AND rv.startdate <= @enddate
AND rv.enddate >= @startdate
WHERE rv.id is null
NOTE: the time portion of @startdate should be 00:00:00 on the first day
and the time portion of @enddate should be set to 23:59:59 for the last
day of the window you are interested in.
How this works:
The ON conditions of the JOIN of the table rooms to the table reservations
identifies any reservation that covers any portion of the window you are
interested in (draw it out with a number line, you will see the logic
works)
But because it's a LEFT JOIN (not an INNER JOIN) it lists all of the rooms
regardless of whether or not there is a reservation. So, for those rows
with room information but without reservation information to match our ON
conditions, all of the columns that would normally have reservation data
in them will have null values. We only want those unmatched rows so that's
why we wrote the WHERE to return only those where the rv.id is null but we
could have checked for NULL in any reservation column.
Yours, Shawn Green Database Administrator Unimin Corporation - Spruce Pine
Giulio <[EMAIL PROTECTED]> wrote on 07/29/2004 09:18:50 AM:
Hi all, I'm using two tables for handling a little room reservations system:
a rooms table:
CREATE TABLE `rooms` ( `id` int(11) NOT NULL auto_increment, `room_number` int(3) default NULL, `room_type` char(1) default NULL, PRIMARY KEY (`id`) ) TYPE=MyISAM;
a reservations table:
CREATE TABLE `reservations` ( `id` int(11) NOT NULL auto_increment, `room_id` int(11) default NULL, `date_from` date default NULL, `date_to` date default NULL, PRIMARY KEY (`id`) ) TYPE=MyISAM;
I have quite clear the join syntax (using for the the ON clause rooms.id and reservations.room_id fields ) to list all the rooms reserved on a given date interval, but I can't figure out the query to list all the rooms of a given type (room_type) that results FREE ( not reserved ) on the given date interval.
thanx for your help,
Giulio
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]
Cantoberon Multimedia srl http://www.cantoberon.it Tel. 06 39737052
-- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]