Schulprojekt Hotelbuchung
Core
- datenbank
Hallo Leute,
ich muss für die Schule ein PHP Projekt realisieren bei dem Mann oder auch Frau Hotels buchen können.
Leider scheitert es bei mir im Moment an der Logik für die Abfrage:
welches Hotel - die ausgewählten Zimmer Typen hat.
Ich habe die Tabellen:
'hotels'
'hotel_zimmer'
Tabelle: Hotels:
ID | Name | Beschreibung | Kinderbetten_Count Internet | Pets | Anreise | Abreise | Behindertengerecht
Tabelle: Zimmer:
ID | Hotel_ID | Zimmer_Art | Preis | Anzahl | Belegt | Kinderbetten_Option
Jetzt müsste ich alle Hotels auswählen:
die einen Gewissen Zimmer_Art haben (Z.B.: Einzellzimmer) und abfragen
ob dort das Zimmer noch frei ist.
SELECT
`booking_hotels`.*
FROM `booking_hotels`, `booking_hotelzimmer`
WHERE
`Internet` = 1 AND `Pets` = 1 AND `Behindertengerecht` = 1
AND `booking_hotelzimmer`.`Hotel_ID` = `booking_hotels`.`ID`
AND (`booking_hotelzimmer`.`Zimmer_Art` = 'Einbett-Zimmer' AND `Anzahl` - `Belegt` > 0)
AND (`booking_hotelzimmer`.`Zimmer_Art` = 'Doppelbett-Zimmer' AND `Anzahl` - `Belegt` > 0)
Das Problem ist das ich nicht weiß wie man zwei Zimmer abfragt da ja die Zimmer_Art nicht gleichzeitig Doppebett-Zimmer und Einbett-Zimmer sein kann?
Ich hoffe ihr habt eine gute Idee
lg Core
Hallo Leute,
ich muss für die Schule ein PHP Projekt realisieren bei dem Mann oder auch Frau Hotels buchen können.
SELECT *,
a.Anzahl - Gebucht as Rechnung
FROM booking_hotelzimmer as a
LEFT JOIN (
SELECT Zimmer_Art, Hotel_Name, Anzahl,
sum(Anzahl) AS Gebucht
FROM user_rechnung_hotels
AND Abreise
GROUP BY Zimmer_Art
) AS b
ON a.Zimmer_Art = b.Zimmer_Art AND a.Hotel_Name = b.Hotel_Name
LEFT JOIN (
SELECT ID, Name
FROM booking_hotels
GROUP BY Name
) AS c
ON a.Hotel_ID = c.ID
WHERE a.Hotel_ID = c.ID
AND (a.Anzahl - Gebucht > 0 OR a.Anzahl - Gebucht IS NULL)
AND a.Zimmer_Art = 'Einbett-Zimmer'
Ist die Lösung,.. aber wie man das mit der Anreise und Abreise macht,..
Zache Sache,..
moin,
Jetzt müsste ich alle Hotels auswählen:
die einen Gewissen Zimmer_Art haben (Z.B.: Einzellzimmer) und abfragen
ob dort das Zimmer noch frei ist.
es ist eigentlich immer das gleiche vorgehen, als erstes für die richtige selektion sorgen. das heißt in deinem falle keine joins irgendwelcher art, sondern in der FROM klausel gehört nur die tabelle der hotels, alles andere ist schlechtes sql:
SELECT *
FROM booking_hotels h
WHERE h.Internet = 1
AND h.Pets = 1
AND h.Behindertengerecht = 1
;
jetzt nur die hotels nehmen, wo ein zimmer bestimmten typs frei ist, das geht mit einer korrelierten unterabfrage.
SELECT *
FROM booking_hotels h
WHERE h.Internet = 1
AND h.Pets = 1
AND h.Behindertengerecht = 1
AND EXISTS (SELECT NULL
FROM hotel_zimmer z
WHERE z.Hotel_ID = h.id
AND z.zimmer_art IN ('Einbett-Zimmer', 'Doppelbett-Zimmer')
AND z.anzahl - z.belegt > 0
)
;
Ilja