2 Tabellen...vermutlich join

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

  • 2 Tabellen...vermutlich join

    Hi,

    Ich mach ein Raumreservierungsprojekt und hab ein Problem mit ner Abfrage.

    Ich hab 2 Tabellen:
    1.Tabelle : raeume:
    Struktur: lfdnum;raumname,eigenschaft
    1;wohnzimmer;gemütlich
    2;keller;kalt
    3;küche;pappsatt

    2. Tabelle : buchungen
    Struktur: lfdnum,raumnummer(=lfdnum aus Tabelle 1),gebucht_von,gebucht_bis
    1;1;24-4-2003;26-4-2003
    2;1;28-4-2003;30-4-2003
    3;2;10-4-2003;15-4-2003
    4;3;18-4-2003;23-4-2003
    5;2;20-4-2003;28-4-2003

    Jetzt will ich wissen, welche Räume im Zeitraum vom z.B. $zeitraum_start=10-4-2003 bis $zeitraum_stop=15-4-2003 frei sind. Die Verbindung zwischen den beiden Tabellen ist tabelle1.lfdnum und tabelle2.raumnummer

    Die Abfrage:
    select raeume.* from raeume left join buchungen on raeume.lfdnum=buchungen.raumnummer
    where ((buchungen.gebucht_von>'$zeitraum_start') and
    (buchungen.gebucht_bis>'$zeitraum_stop'))

    ist mein letzter Stand :-( ich mach nun schon fast 2 Tage dran rum, komm aber nicht drauf. Die obige abfrage liefert nur die gebuchten Räume und die dann so oft, wie sie in der Tabelle buchungen drinn sind :-( Ich hätte aber gerne alle Räume, die im angegebenen Zeitraum frei sind....kann da jemand helfen ?

    danke an alle vorab... Bernd

    PS : in meinem SELECT oben ist der WHERE Teil ist noch nicht korrekt....das weis ich....aber ich knabber ja auch am SELECT Teil rum. Das where werd ich dann schaffen (hoff ich).

  • #2
    Code:
    SELECT DISTINCT r.*
    FROM r 
    LEFT JOIN buchungen b
    ON b.raumnummer=r.lfdnum
    HAVING b.gebuchtvon>$endtime OR b.gebuchtbis<$starttime
    sollte passen
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      sorry...abba das klemmt...

      ....meinst du
      SELECT DISTINCT r.* FROM raeume as r ...... ?

      ....egal ob ich dein orginal nehme oder mein "...FROM raeume as r..." einfüge. Er sagt immer : Unknown column 'b.gebuchtvon' in 'having clause' !?

      any ideas ?

      trotzdem....danke ! so long, Bernd

      Kommentar


      • #4
        Code:
        SELECT DISTINCT r.*
        FROM raeume r 
        LEFT JOIN buchungen b
        ON b.raumnummer=r.lfdnum
        HAVING b.gebucht_von>$zeitraum_start OR b.gebucht_bis<$zeitraum_start
        wobei dein statement negiert evtl. besser wär

        so kriegst du nämlichnur die räume, die nicht in dem angegeben zeitraum belegt sind, aber entweder vorher und/oder nachher
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          sorry...

          ...wenn ich dich nerve, aber jetzt spuckt er mir nur die Räume aus, die mindestens ein mal in der buchungen Tabelle drinn sind.

          Wenn z.B. das wohnzimmer noch nie gebucht wurde (und somit auch noch nicht in der buchungen Tabelle drinn ist) dann listet er es nicht auf obwohl es vom Termin her frei wäre.

          Wenn das Wohnzimmer mindestens 1 mal gebucht wurde, dann macht er es korrekt mit deinem obigen Statement.

          Hast du dazu vielleicht noch etwas passendes auf Lager um das problem zu lösen ?

          trotzdem : Danke für deine Superschnelle Hilfe !

          so long, Bernd

          Kommentar


          • #6
            Original geschrieben von mrhappiness
            wobei dein statement negiert evtl. besser wär

            so kriegst du nämlichnur die räume, die nicht in dem angegeben zeitraum belegt sind, aber entweder vorher und/oder nachher
            in deiner where bedingung lässt du dir ja die räume ausgeben, die innerhalb eines best. zeitraums belegt sind. setz das mal in klammernund schreib ein NOT vornedran
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              ...uaahh....sooryy....

              nene....das Problem ist anders. Ich hab ja folgende Räume in meiner raeume Tabelle stehen:
              Wohnzimmer
              Küche
              Keller

              So...nun reservier ich mal das Wohnzimmer. Vom 20.4.2003 bis zum 30.4.2003

              OK. Da meine buchen Tabelle noch leer war, steht nach dem reservieren nun :

              lfdnum=1
              raumnummer=1
              gebucht_von=20.4.2003
              gebucht_bis=30.4.2003

              drinn. Ok. Jetzt mach ich eine Abfrage mit dem obigen select. Als Datumsbereich geb ich mal start=10.4.2003 an und als stop=15.4.2004 an. Nun hätte ich gerne als Ausgabe :
              Wohnzimmer
              Küche
              Keller
              Denn es sind ja alle Räume frei. ABER : Er zeigt nur das Wohnzimmer an ! Keller und Küche unterschlägt er. Sobald ich in der buchen Tabelle auch einen Termin für die Küche und den Keller eintrage, zeigt alles an.

              Ich hoffe ich konnte das Problem genauer erklären. Erst wenn der Raum mindestens ein mal in der buchentabelle auftaucht, wird er angezeigt.

              danke....kanns garnicht oft genug sage.....für deine Hilfe. Ich find es super nett, dass du dich mit meinem Sch... :-) auseinandersetzt.

              so long, bernd

              Kommentar


              • #8
                ein schritt weiter und nächstes Probem... :-(

                Hi,

                ich hab folgendes in die where Klausel eingefügt:
                where ((b.buchung_von IS NULL) or (b.buchung_von>'$zeitraum_start'))

                Er zeigte ja wie gesagt nur die an, welche mindestens einen Eintrag in der buchentabelle drinn hatten. Mit dem IS NULL zeigt er nun auch die Räume an, welche keinen eintrag in der buchen-Tabelle haben.

                Jetzt ist aber das nächste Problem aufgetaucht. Wenn in der buchen-Tabelle z.B. das wohnzimmer 2 mal drinn steht, dann sortiert er zwar den Eintrage wo eine Reserivierungsüberlappung statt findet raus, aber er zeigt das Wohnzimmer trotzdem an, weil im 2. Eintrag der buchungen-Tabelle KEINE Überlappung des Termins vorligt.

                Das DISTINCT wirkt sich nur auf die Tabelle raeume aus. Kann man das noch so ändern, dass es sich auch auf die Buchungen Tabelle auswirkt ?

                danke.....so long, Bernd

                Kommentar

                Lädt...
                X