Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Fehler bei Abfrage

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Fehler bei Abfrage

    Guten Tag ,

    Wo ist der (Logik-) Fehler in der Abfrage?
    Ich möchte alle Tische von einen bestimmten Raum haben, wo für einen bestimmten Tag eine Reservierung vorliegt oder keine vorliegt.
    ... und hier die Abfrage:
    Code:
    SELECT roomsAndTables.id, tableNoName, seats, resDate, resTime
    FROM roomsAndTables
    LEFT JOIN res ON roomsAndTables.id = res.tableId
    LEFT JOIN resDetails ON res.resDetailId = resDetails.resId
    WHERE roomName = ?
    AND (resDate = ? OR resTime IS NULL)
    ORDER BY tableNoName
    Ich habe schon mit "AND" und "OR" in der WHERE-Clause rumprobiert, jedoch ohne Erfolg.
    Hat jemand nen Tipp für mich, woran es liegt?

    Danke im Voraus und
    mfG APH

    komisch: Kaum macht man`s richtig funktioniert`s a scho.

  • #2
    Ich möchte alle Tische von einen bestimmten Raum haben, wo für einen bestimmten Tag eine Reservierung vorliegt oder keine vorliegt.
    Also alle (?)

    "Reserviert" ist ein binary flag, es macht keinen Sinn auf beide Stati gleichzeitig abzufragen, denn der Status kann ja nur "ja" oder "nein" sein (dh. "Suche mir Einträge, wo das Flag auf 'ja' oder 'nein' steht" findet immer alle Einträge)
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Sicher das der Logikfehler im Query steckt und nicht im Kopf? Der Query macht das was du geschreiben hast. Kann es sein das da der Fehler ist "oder keine vorliegt"? Das heißt der Tisch darf noch nie resserviert wurden sein, egal welches Datum. Ich kenn den Kontext nicht, kommt mir aber seltsam vor.

      Kommentar


      • #4
        Wie mache ich es dann vom Datum abhängig?

        komisch: Kaum macht man`s richtig funktioniert`s a scho.

        Kommentar


        • #5
          Was für ein Datum? Entweder gibt es eine Reservierung oder ebend nicht. Was du willst ist wahrscheinlich einfach "Also alle (?)", mit der Information ob resserviert. Also einfach das weglassen: "AND (resDate = ? OR resTime IS NULL)"

          Kommentar


          • #6
            Zitat von erc Beitrag anzeigen
            Also einfach das weglassen: "AND (resDate = ? OR resTime IS NULL)"
            Oder halt nur eines abfragen...
            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

            Kommentar


            • #7
              Habe das problem jetzt mit einer eigens geschriebenen PHP-Funktion gelöst.

              Andere Frage:
              Wenn ich in der Primärtabelle einen Eintrag erstelle, wird in der Tabelle wo die ID als Fremdschlüssel definiert ist, der Fremdschlüssel automatisch eingetragen oder nicht?
              Also:
              Code:
              INSERT INTO primaertabelle (...)
              VALUES (...);
              
              INSERT INTO zweitetabelle (...)
              VALUES (...);
              
              //==== oder reicht ====
              INSERT INTO primaertabelle (...)
              VALUES (...);

              komisch: Kaum macht man`s richtig funktioniert`s a scho.

              Kommentar


              • #8
                Zitat von APH Beitrag anzeigen
                Habe das problem jetzt mit einer eigens geschriebenen PHP-Funktion gelöst.

                Andere Frage:
                Wenn ich in der Primärtabelle einen Eintrag erstelle, wird in der Tabelle wo die ID als Fremdschlüssel definiert ist, der Fremdschlüssel automatisch eingetragen oder nicht?
                Natürlich nicht. Du hast:

                Code:
                test=# create table master (id serial primary key, master_value text);
                CREATE TABLE
                Time: 35,111 ms
                test=*# create table slave (master_id int references master, slave_value text);
                CREATE TABLE
                Time: 17,609 ms
                Nun kannst Du in einem Befehl in beide was eintragen:

                Code:
                test=*# with id as (insert into master(master_value) values ('master') returning id) insert into slave (select id, 'slave' from id) returning 'Habe fertig';
                  ?column?
                -------------
                 Habe fertig
                (1 row)
                Kontrolle:

                Code:
                test=*# select * from master;
                 id | master_value
                ----+--------------
                  1 | master
                (1 row)
                
                Time: 0,231 ms
                test=*# select * from slave;
                 master_id | slave_value
                -----------+-------------
                         1 | slave
                (1 row)
                PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                Kommentar


                • #9
                  wie geschrieben: voriges Problem gelöst.
                  Hier gehts weiter

                  komisch: Kaum macht man`s richtig funktioniert`s a scho.

                  Kommentar


                  • #10
                    Wenn ich in der Primärtabelle einen Eintrag erstelle, wird in der Tabelle wo die ID als Fremdschlüssel definiert ist, der Fremdschlüssel automatisch eingetragen oder nicht?
                    Wie akretschmer schon sagte: Nein, da passiert nichts automatisch.

                    Die "foreign key constraints" haben nur die Aufgabe, die Fremdschlüsselbeziehung konsistent zu halten.
                    Wenn du z.B. einen Datensatz löschen willst, der aber noch in einer anderen Tabelle referenziert wird, dann wird die Datenbank die Löschung verweigern mit dem Hinweis, das ein foreign key constraint verletzt wird.
                    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                    Kommentar

                    Lädt...
                    X