Abfrage die auch eine Zeile ausgibt wenn Bedingung falsch

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Abfrage die auch eine Zeile ausgibt wenn Bedingung falsch

    Hi hab leider nichts in dieser Hinsicht gefunden!

    Ich habe ein Datenbank erstellt um die Zimmerbelegung eines Hotels zu überwachen. Ich möchte jetzt eine Belegungsliste erstellen für einen bestimmten Tag die etwa so aus sieht:

    Code:
    Zimmer1 : 
    Zimmer2 : Müller
    Zimmer3: 
    Zimmer4: Maier
    Im Moment Frage ich jedes Zimmer für jeden Tag einzeln ab (bei 20 Zimmern und einer Monatsübersicht sind das ca 150 Abfragen!!!) Ich bekomm es zwar hin, mir die Reservierten Zimmer anzeigen zu lassen, also
    Code:
    Zimmer2 : Müller
    Zimmer4: Maier

    aber ich will, das auch ein Zimmer OHNE Reservierung (also ohne Eintrag in die Datenbank!) angezeigt wird. Geht das??

    Vielen Dank
    Seballa

  • #2
    Ja, das geht.

    Kommentar


    • #3
      Nimm mir's nicht übel, aber du hättest genauso gut fragen können "Ich habe ein Auto, das fährt nicht. Warum nicht ?".

      Also bitte poste ein bisschen mehr zu deinem Problem....

      Kommentar


      • #4
        Sorry!
        OK.
        Ich habe drei Tabellen:
        kartei ---> Kundendaten Primerykey knr
        zimmer ---> Zimmernamen + Beschreibungen Primerykey zID
        res --> Reservierungsdaten Primerykey ResID; Anreise + Abreise als Datum; kNR (Verknüpft mit kartei); zID (Verknüpft mit Zimmer)

        Mit folgender Abfrage kann ich mir die Belegten Zimmer für ein bestimmtes Datum ausgeben lassen:
        PHP-Code:
        SELECT 
            
        `kartei`.`nname`,
            `
        zimmer`.`Zimmer`
        FROM 
            
        `kartei`,`zimmer`,`res`
        Where
            
        (
                `
        res`.`knr` = `kartei`.`knr
            AND 
                `
        zimmer`.`zID` = `res`.`zimmer`
            ) 
            AND
            (
                `
        res`.`andatum` <= "2005-07-24"
            
        AND
                `
        res`.`abdatum` > "2005-07-24"
            

        Ich möchte aber wie oben beschrieben auch die freien Zimmer anzeigen lassen (also alle Datensätze aus der Tabelle zimmer + wenn das Zimmer belegt ist den Nachnamen aus der Tabelle kartei)

        Ich hoffe ihr versteht was ich meine!

        Kommentar


        • #5
          Datensätze, die nicht existieren, kannst du auch nicht anzeigen lassen. woher soll sql wissen ob du stündlich, minütlich oder täglich anzeigen willts.

          Kommentar


          • #6
            Original geschrieben von TobiaZ
            Datensätze, die nicht existieren, kannst du auch nicht anzeigen lassen. woher soll sql wissen ob du stündlich, minütlich oder täglich anzeigen willts.
            Da liegt ja im Grunde mein Problem. Aber eigentlich kann ich sql alle Angaben geben die es bräcuhte ich weis nur nicht wie:
            • Der Zeitraum ist genau ein Tag (das Datum steht ja in der Abfrage)
            • Es sind immer genausoviele Datensätze wie es Einträge in der Tabelle Zimmer gibt.
            • und jetzt kommt die Crux an der Sache: SQL soll den Nachnamen ausgeben wenn in einem Datensatz der Tabelle res der angegebene Tag zwischen Anreise und Abreise liegt sonst soll einfach nichts da stehen

            Bei 3 Datensätzen in der Tabelle Zimmer(Zimmer1, Zimmer2, Zimmer3) könnte die Ausgabe für einen bestimmten Tag also so aussehen:

            Zimmer |Name
            Zimmer1 |Müller
            Zimmer2 |
            Zimmer3 |Maier

            Schade

            Kommentar


            • #7
              Hatte gerade eine Idee hat leider nicht funktioniert:

              PHP-Code:
               SELECT  
                  
              `zimmer`.`Zimmer` , 
                   
                  `
              kartei`.`nname`
                      
              WHERE 
                          
              (
                              `
              res`.`knr` = `kartei`.`knr`
                              AND `
              zimmer`.`zID` = `res`.`zimmer`
                          )AND (
                              
              YEARWEEK( `res`.`andatum` ) <= YEARWEEK"2005-07-01" )
                              AND 
              YEARWEEK( `res`.`abdatum` ) >= YEARWEEK"2005-07-01" )
                          )
                          
                  
              FROM `kartei` , `zimmer` , `res
              Ich habe also gesagt: select zimmer.Zimmer und kartei.name das letztere aber nur, wenn die Bedingungen erfüllt. Leider hats nicht geklappt so wie ichs geschrieben habe aber vielleicht kennt jetzt jemand eine Lösung.
              Zuletzt geändert von seballa; 06.11.2005, 12:50.

              Kommentar


              • #8
                Re: Abfrage die auch eine Zeile ausgibt wenn Bedingung falsch

                In der DB gibt es folgende Datensätze (so würden sie ausgegeben werden)
                Code:
                Zimmer2: Müller
                Zimmer4: Maier
                Du willst du aber alle Zimmer von 1 bis <größteZimmernummer> ausgeben und ggf. die Belegung aus der DB dahinter. Soll dann so aussehen:
                Code:
                Zimmer1: 
                Zimmer2: Müller
                Zimmer3: 
                Zimmer4: Maier
                Also holst du dir (wie auch immer) alle Belegungen aus der DB; zum Beispiel in ein Array $belegungen.
                Nun iterierst du von 1 bis <größteZimmernummer> wie folgt:
                PHP-Code:
                for ($i 1$i <= $groessteZimmerNr$i++) {
                    echo 
                'Zimmer'.$i.': ';
                    if (isset(
                $belegungen[$i]))
                        echo 
                $belegungen[$i];
                    echo 
                '<br>';

                Kommentar


                • #9
                  Re: Re: Abfrage die auch eine Zeile ausgibt wenn Bedingung falsch

                  Original geschrieben von onemorenerd
                  Nun iterierst du von 1 bis <größteZimmernummer>
                  Und wenn es in den Zimmernummern Lücken gibt?

                  Dann hast du damit plötzlich Zimmer dazuerfunden, die gar nicht existieren ...
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    LEFT bzw. RIGHT JOIN kann dir bei der Lösung helfen, s. dazu unser Sticky Thread am Anfang des SQL-Forums

                    Kommentar

                    Lädt...
                    X