Ankündigung

Einklappen
Keine Ankündigung bisher.

Datetime und Überschneidungen in PHP

Einklappen

Neue Werbung 2019

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

  • #31
    Davon abgesehen, daß (auf den ersten Blick) Deine Prüfung wohl nicht alle möglichen Überschneidungsfälle abdeckt - die Realisierung in PG ist weit mächtiger. Neben dem Check auf Überlappung mit dem && - Operator kann man weitere Spalten auf z.B. Gleichheit nutzen. Damit könnte die Termintabelle für mehrere Leute gelten. Realisiert wird das in PG durch GiST - Indexe - die kann MySQL schon mal nicht. Die TRIGGER-Lösung mag (wenn man es richtig prüft...) funktionieren, aber definitiv nicht so effizient sein wie die Realisierung in PG. Sobald die Tabelle signifikant größer wird wird wohl der TRIGGER recht lange brauchen.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #32
      akretschmer ist das nun PostgreSQL-Propaganda?

      Kommentar


      • #33
        Zitat von Meister1900 Beitrag anzeigen
        Nur um mal zu zeigen, dass MySQL das auch kann:

        Code:
        DELIMITER //
        
        CREATE TRIGGER check_dates
        BEFORE INSERT ON `t2`
        FOR EACH ROW
        BEGIN
        
        IF EXISTS (
        SELECT beginn
        FROM t2
        WHERE NEW.beginn < ende
        AND NEW.ende > beginn
        ) THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Fehler! Termin-Überschneidung!';
        END IF;
        END; //
        
        DELIMITER ;
        termine.PNG

        Also überleg dir das nochmal mit dem Wechsel zu Postgre
        ---------



        Vielen Dank, ich denke ich mach erstmal damit weiter.. PostgreSQL scheint ein weniger anders zu sein, konnte gestern nicht mal die verbindung vom php aufbauen .

        Habe ich damit alle überschneidungen abgedeckt, also mit deinem code
        PHP-Code:
          IF EXISTS (     SELECT beginn     FROM t2     WHERE NEW.beginn ende     AND NEW.ende beginn THEN     SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT 'Fehler! Termin-Überschneidung!';   END IF; END// 

        Wie könnte ich nur eine Anfrage Realisieren, hierbei wird ja direkt ein eintrag gemacht, ist es möglich mit Trigger ? nur eine Anfrage zu machen.. über Select hab ich ja wieder mein Problem...

        Danke euch !.

        lg

        Kommentar


        • #34
          Zitat von deluxe13 Beitrag anzeigen

          Vielen Dank, ich denke ich mach erstmal damit weiter.. PostgreSQL scheint ein weniger anders zu sein, konnte gestern nicht mal die verbindung vom php aufbauen .

          Natürlich ist es anders - besser! Das mit der Verbindung: vermutlich hast Du vergessen, listen_adresses nicht zu setzen, und/oder pg_hba.conf nicht angepaßt.
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #35
            Wie könnte ich eine einfache abfrage mit einem Trigger machen, ich finde dort nur die methoden zum löschen, update und einfügen

            Kommentar


            • #36
              Trigger sind nicht für Abfrage, sondern "feuern" bei Insert, Update und Delete. Und bei DDL-Befehlen, sind dann sog. DDL-Trigger- Aber das führt hier zu weit ...
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #37
                Zitat von akretschmer Beitrag anzeigen
                Trigger sind nicht für Abfrage, sondern "feuern" bei Insert, Update und Delete. Und bei DDL-Befehlen, sind dann sog. DDL-Trigger- Aber das führt hier zu weit ...
                Ach ja, fast vergessen: Man kann mittels einer RULE beim Select erreichen, daß irgend etwas anderes gemacht wird. Aber das kann MySQL möglicherweise nicht...
                https://www.postgresql.org/docs/curr...reaterule.html

                Davon abgesehen gelten Rules in PG (zumindest intern in der Community) als deprecated, please don't use it.
                PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                Kommentar


                • #38
                  Zitat von deluxe13 Beitrag anzeigen
                  Wie könnte ich eine einfache abfrage mit einem Trigger machen, ich finde dort nur die methoden zum löschen, update und einfügen
                  Sorry, dass wir dich nun entgültig verwirrt haben

                  Option 1)
                  Du machst die Prüfung mit PHP vor dem INSERT als SELECT und wenn da ein Ergebnis kommt, führtst du das INSERT gar nicht erst aus.
                  Beispiele dazu findest du ja in diesem Thread genügend.

                  Option 2)
                  Du machst es wie gezeigt über den Trigger (oder bei PostgreSQL über die gaaaanz tollen Exclude Constraints) und fängst den Fehler, der dann von der Datenbank kommt, entsprechend mit PHP ab.
                  Dann sparst du dir die Prüfung im PHP Code komplett.

                  Falls du dich für Option 2 entscheidest und du Schwierigkeiten hast, kann ich dir auch später noch ein PHP Beispiel dazu posten.
                  Aber bitte nicht beide Varianten vermischen.
                  sorry, shift-taste kaputt

                  Kommentar


                  • #39
                    Also Option 1 habe ich ja versucht, leider aber Fehler der aucj beschrieben ist in thread.

                    Zu Option 2 das mit dem trigger funktioniert soweit sehr gut, aber leider wird auch direkt ein Eintrag gemacht falls Termin frei. Ich möchte aber erstmal nur eine Anfrage machen ob Termin frei, und das scheint ja beim trigger so nicht möglich zu sein oder ?

                    Vielen Dank für deine Mühe und Hilfe

                    Kommentar


                    • #40
                      Dafür brauchst du keinen Trigger, da reicht ein einfaches SELECT wie z.B.:

                      PHP-Code:
                      SELECT EXISTS(SELECT beginn
                      FROM t2
                      WHERE 
                      '2018-09-11 15:00:00' ende
                      AND '2018-09-11 22:00:00' beginn) as termin_vorhanden 
                      Liefert 1 wenn es Überschneidungen gibt und 0 wenn nicht.
                      sorry, shift-taste kaputt

                      Kommentar


                      • #41
                        Hab meinen ersten Fehler gefunden... Warum es von Anfang nicht funktionieren konnte... Ich habe die variable als $starn gesetzt aber mit $startn versucht abzurufen Natürlich kann es. Nicht funktionieren. Siehe Seite 1 . Ich denke in meinem ersten Post hab ich auch alle Überschneidungen betrachtet.
                        Vielen vielen Dank !! Für eure Mühe.

                        Kommentar

                        Lädt...
                        X