Jag har tre tabeller. SELECT Room.RoomCategory, RoomNr.RoomNr Hmm... skulle precis som Andreas vilja se din tabellstruktur. Gör en skärmdump och Tabellen Booking innehåller data om själva bokningen. Så här bör frågan se ut: Andreas... ta detta symboliskt nu... PUSS på dig. SELECT problem... någon?
Booking, Room och RoomNr
I Booking lagrar jag data som rör en specifik bokning på ett hotell.
Jag lagrar här bla datum för incheckning och utcheckning.
Jag har främmande nycklar till både Room och RoomNr.
I Room lagrar jag hotellrummens olika kategorier (namn som typ bröllopsvit).
I RoomNr lagrar jag hotellrummens nummer.
Jag har främmande nyckel till Room.
Jag försöker nu köra en SQl sträng bland dessa tabeller som skall ta fram alla lediga rum (rumskategori kopplat till rumsnummer) mellan två datum men lyckas inte hur jag än försöker. Det är säkert någonting lätt som jag förbiser och jag vore jättetacksam om Du ser vad det är.
SQl strängen jag kör ser just nu ut så här...
SELECT Room.RoomCategory, RoomNr.RoomNr
FROM Room, RoomNr, Booking
WHERE RoomNr.IDRoom= Room.IDRoom
AND Booking.IDRoomNr<>RoomNr.IDRoomNr
AND Booking.CheckIn Between '2004-01-01' AND '2004-01-31'
I detta läget förväntar jag mig att koden skall ta bort två rum ur urvalet eftersom de enligt de två "fråge" datumen redan är bokade. Nu tas bara ett av rummen bort och det rummet har exakt dessa datum som incheckning och utcheckning.
Om jag nu har 24 rum och 12 rumskategorier vill jag alltså att två rum inte skall visas i listan för lediga rum de efterfrågade datumen.
Hur gör jag?????Sv: SELECT problem... någon?
FROM Room INNER JOIN RoomNr ON Room.IDRoom = RoomNr.IDRoom
WHERE NOT RoomNr.IDRoom IN (SELECT DISTINCT Booking.IDRoomNr
FROM Booking
WHERE Booking.CheckIn Between '2004-01-01' AND '2004-01-31')Sv: SELECT problem... någon?
ladda upp den/maila den eller beskriv den här.
Får vi bara all information kommer du få ditt svar blixtsnabbt.
/EmmaSv: SELECT problem... någon?
IDBooking
RoomCategory
NrOfAdults
NrOfChildren
INPCategory
OPCategory
ExtraBed
BabyCrib
SortOfPayment
CheckIn
CheckOut
Remarks
Sum
RoomNr
IDGuest
I denna tabell sparas data för respektive bokning. Tabellen tillåts och kommer att innehålla redudant data eftersom data skall sparas för lång tid framåt pga statistikkörning mm. Tabellen skall aldrig påverkas av andra administrativa ändringar som kan komma att utföras på andra håll i databasen. Tabellen är kopplad till tabellen Guest som har namn och adressuppgifter på själva gästen.
Tabellen Room innehåller data om rummen eller rumskategorierna rättare sagt.
En rumskategori kan vara Bröllopsvit en annan Stort etagerum tex.
IDRoom
RoomCategory
Tabellen RoomNr innehåller rumsnummer. Tabellen är kopplad till tabellen Room.
IDRoomNr
RoomNr
IDRoom
Antag nu att en gäst ringer hotellet och frågar efter lediga rum mellan datumen 2003-12-10 och 2004-01-01. Endast de rum som inte har någon bokning på sig under denna datumperiod skall nu visas som lediga rum.
Hoppas ni förstår hur jag menar och vill ha det. Kankse är inte databasen rätt modulerad för ändamålet. Just nu känns det svårt att få till det. Jag har skrivit SQL om och om igen men får inte till det.Sv: SELECT problem... någon?
<code>
PARAMETERS [From] DateTime, [To] DateTime;
SELECT RoomNr.RoomNr, Room.RoomCategory,
FROM RoomNr INNER JOIN Room ON RoomNr.IDRoom = Room.IDRoom
WHERE NOT RoomNr.IDRoom IN (SELECT DISTINCT Booking.IDRoomNr
FROM Booking
WHERE NOT (Booking.CheckIn >= [To] Or Booking.CheckOut =< [From]))
</code>
Eller om du föredrar konstanter:
<code>
SELECT RoomNr.RoomNr, Room.RoomCategory,
FROM RoomNr INNER JOIN Room ON RoomNr.IDRoom = Room.IDRoom
WHERE NOT RoomNr.IDRoom IN (SELECT DISTINCT Booking.IDRoomNr
FROM Booking
WHERE NOT (Booking.CheckIn > #2004-01-31# Or Booking.CheckOut < #2004-01-01#))
</code>Sv: SELECT problem... någon?
Det fungerar!!! :-)
Tack.