Core: Schulprojekt Hotelbuchung

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

  1. 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,..

  2. 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