Ankündigung

Einklappen
Keine Ankündigung bisher.

Wie soll das funktionieren ??

Einklappen

Neue Werbung 2019

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

  • Wie soll das funktionieren ??

    Guten Tag Leute,
    Ich bin neu hier im Forum und ich hoffe ganz stark auf eure Hilfe.
    Ich muss für die Schule ein Projekt machen , jedoch habe ich keine Ahnung wie ich SQL Abfrage formulieren soll. Es soll ein Buchungssystem für ein Hotel werden. Wenn ich das Thema im falschen Bereich gemacht habe , dann bitte ich darum,dass das Thema verschoben wird .

    So ist meine Datenbank aufgebaut :
    Tabelle "reservierung"
    Spalten "Buchungsnr" "Reservierungsnr" "Gastnr" "Anreise" "Abreise" "Zimmerid"

    Tabelle "zimmer"
    Spalten "Zimmerid" "Kategorie" "Eigenschaften"

    Tablle "Kategorie"
    Spalten "Kategorienr" "Preis" "Kategorie"

    Es soll auf der ersten Seite eingegegeben werden wann man anreist , wann man abreist , personen und wieviele Zimmer man haben will.

    Meine Abfrage habe ich so gemacht :
    PHP-Code:
    $reservierung_abfrage "SELECT * FROM reservierung AS re
    INNER JOIN zimmer AS zi ON re.Zimmerid = zi.Zimmerid
    where NOT ('
    $ankunft' = Anreise or '$ankunft' > Anreise and '$ankunft' < Abreise
    or '
    $abreise' > Anreise and '$abreise' < Abreise
    or Anreise between 
    $ankunft and $abreise)"
    Vergeblich bekomme ich auf der nächsten Seite die Zimmer ausgegegeben die in der reservierungs Tabelle stehen.
    Um es besser zu erklären hier ein Beispiel :
    In der Datenbankt steht ein Zimmer in der Reservierungstablle 3x vergeben an verschiedenen Zeitpunkten mit der Zimmernr 783.
    Nehmen wir mal an vom 13.06.2014 - 15.06.2014 und vom 16.06.2014 - 18.06.2014 und vom 20.06.2014 - 23.06.2014 ist das Zimmer ausgebucht.
    Ich gebe auf der index.html folgendes Datum ein :
    (anreisedatum)13.06.2014 und (abreisedatum) 15.06.2014.
    Ich erhalte dann trz Einträge vom Zimmer 783
    vom 16.06.2014 - 18.06.2014 und vom 20.06.2014 - 23.06.2014
    Wie kann ich machen , dass das Zimmer 783 nicht mehr angezeigt wird auf der nächsten Seite ?

    Ich danke schonmal im Vorraus für eure Hilfe
    - Nickalaschka

  • #2
    Und das ist jetzt in wie weit Fortgeschritten ?
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Ich weiß nicht wo ich das einstufen soll. Für mich ist es nicht ganz so einfach.

      Kommentar


      • #4
        Ich weiß nicht wo ich das einstufen soll.


        So:
        http://www.php.de/php-fortgeschritte...uncements.html


        [MOD: verschoben]
        [COLOR="#F5F5FF"]--[/COLOR]
        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
        [COLOR="#F5F5FF"]
        --[/COLOR]

        Kommentar


        • #5

          Danke

          Kommentar


          • #6
            und zurüch zum ursprünglichen problem:
            debuggen:
            http://php-de.github.io/jumpto/sql/

            ich gehe davon aus, dass beim zusammenbauen der querie was falsch gelaufen ist.
            ich kenn mich aber nicht aus, mit mysql.

            Kommentar


            • #7
              Zitat von moma Beitrag anzeigen
              und zurüch zum ursprünglichen problem:
              debuggen:
              http://php-de.github.io/jumpto/sql/

              ich gehe davon aus, dass beim zusammenbauen der querie was falsch gelaufen ist.
              ich kenn mich aber nicht aus, mit mysql.
              Das Problem ist nicht beim Aufbauen der Query.

              Ich bekomme alle Zimmer die in der Reservierungstabelle stehen ausgegeben mit der Ausnahme , dass die Zimmer zu dem eingegebenen Datum belegt sind.
              Dh. wenn ein Zimmer zu 2 verschiedenen Zeiträumen gebucht wurden und eins zu dem eingegbenen Zeitpunkt , dann wird eine Spalte nicht angezeigt.

              Kommentar


              • #8
                Zitat von Nickalaschka Beitrag anzeigen
                Das Problem ist nicht beim Aufbauen der Query.
                Sondern?

                Ich bekomme alle Zimmer die in der Reservierungstabelle stehen ausgegeben mit der Ausnahme , dass die Zimmer zu dem eingegebenen Datum belegt sind.
                Dh. wenn ein Zimmer zu 2 verschiedenen Zeiträumen gebucht wurden und eins zu dem eingegbenen Zeitpunkt , dann wird eine Spalte nicht angezeigt.
                Parse error.

                Das Leben kann sooooo schön sein. Du hast:

                Code:
                test=# create table zimmer (id int primary key, name text);
                CREATE TABLE
                test=*# insert into zimmer values (1, 'zimmer 1');
                INSERT 0 1
                test=*# insert into zimmer values (2, 'zimmer 2');
                INSERT 0 1
                test=*# insert into zimmer values (783, 'zimmer 783');
                INSERT 0 1
                test=*# create table buchung(zimmer int references zimmer, belegt daterange, exclude using gist (zimmer with =, belegt with &&));
                CREATE TABLE
                test=*# insert into buchung values (783, '[2014-06-13,2014-06-16)');
                INSERT 0 1
                test=*# insert into buchung values (783, '[2014-06-16,2014-06-18)');
                INSERT 0 1
                test=*# insert into buchung values (783, '[2014-06-20,2014-06-23)');
                INSERT 0 1
                Nun will ich wissen, welche Zimmer vom 13. bis 15. frei sind:

                Code:
                test=*# select id from zimmer except select zimmer from buchung where belegt && '[2014-06-13,2014-06-15)';
                 id
                ----
                  2
                  1
                Vom 23. bis 25.:

                Code:
                test=*# select id from zimmer except select zimmer from buchung where belegt && '[2014-06-23,2014-06-25)';
                 id
                -----
                 783
                   2
                   1
                (3 rows)
                Und als Bonus kann ich auch kein Zimmer doppelt belegen:

                Code:
                test=*# insert into buchung values (783, '[2014-06-22,2014-06-25)');
                ERROR:  conflicting key value violates exclusion constraint "buchung_zimmer_belegt_excl"
                DETAIL:  Key (zimmer, belegt)=(783, [2014-06-22,2014-06-25)) conflicts with existing key (zimmer, belegt)=(783, [2014-06-20,2014-06-23)).
                STATEMENT:  insert into buchung values (783, '[2014-06-22,2014-06-25)');

                Geht so ab PostgreSQL 9.3.
                PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                Kommentar


                • #9
                  Ja, da lob ich PG. Daterange ist ein cooler Datentyp.
                  [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                  Kommentar

                  Lädt...
                  X