Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL Abfrage erweitern

Einklappen

Neue Werbung 2019

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

  • #16
    Hast du das Prinzip denn verstanden und funktioniert die Abfrage so, wie du sie brauchst?

    Kommentar


    • #17
      Also Abfrage scheint zu funktionieren und das Konzept meine ich verstanden zu haben.
      Null = Service an dem Termin verfügbar
      blocked = Service an dem Termin nicht verfügbar

      Korrekt?

      Kommentar


      • #18
        Ja, richtig.

        Kommentar


        • #19
          Okay
          Dann erhalte ich ein Ergebnis wie dieses hier
          2021-06-20 18:00:00 NULL NULL
          2021-06-21 14:00:00 blocked NULL
          2021-06-21 15:00:00 blocked NULL
          2021-06-21 16:00:00 blocked blocked
          2021-06-21 17:00:00 blocked blocked

          Gibt es auch direkt die Möglichkeit, nur die timeslot_start zu erhalten, wo service13 != "blocked" ist?
          Würde sonst mit PHP nun an die Sache gehen und das via PHP filtern.

          Kommentar


          • #20
            Wahrscheinlich könntest du direkt mit HAVING arbeiten.

            Kommentar


            • #21
              Super !
              also ich bin schon mal ein gutes Stück weitergekommen

              Meine neue Version mit HAVING:

              PHP-Code:
              SELECT
                  t
              .timeslots AS timeslots,
                  IF(
              COUNT(e_serviceA.id) > 0'blocked'null) AS service13,
                  IF(
              COUNT(e_serviceB.id) > 0'blocked'null) AS service2
              FROM 
              (
                      
              SELECT
                          DATE_ADD
              (DATE_ADD(DATE_ADD(CURRENT_DATE(), INTERVAL 1 DAY), INTERVAL day.seq DAY), INTERVAL hour.seq HOUR) as timeslots
                      FROM
                          seq_0_to_30 
              AS dayseq_14_to_18 AS hour
                  
              t
              LEFT JOIN
                  events e_serviceA ON t
              .timeslots BETWEEN DATE_SUB(e_serviceA.startINTERVAL 4 HOUR) AND DATE_ADD(e_serviceA.startINTERVAL 59 MINUTE) AND e_serviceA.service=2
              LEFT JOIN
                  events e_serviceB ON t
              .timeslots BETWEEN e_serviceB.start AND DATE_ADD(e_serviceB.startINTERVAL 239 MINUTE) AND e_serviceB.service=2
              GROUP BY
                  t
              .timeslots
              HAVING 
                  
              `service13IS NULL
              ORDER BY
                  t
              .timeslots 
              Wenn User Service 1 oder 3 gewählt hat > HAVING `service13` IS NULL
              Wenn User Service 2 gewählt hat > HAVING `service2` IS NULL

              Sah erst mal gut aus - dann ist mir aber aufgefallen, dass diese Abfrage meine bereits belegten Termine nicht berücksichtig.
              Das meine ich richtig gelöst zu haben, in dem ich die HAVING Zeile wie folgt angepasst habe:

              PHP-Code:
              HAVING `service13IS NULL AND timeslots NOT IN SELECT `startFROM `events`) 
              bzw.
              PHP-Code:
              HAVING `service2IS NULL AND timeslots NOT IN SELECT `startFROM `events`) 
              Wenn ich hier jetzt nichts durcheinander gebracht habe, dann sollte das soweit richtig sein.
              Denn optisch waren die Ergebnisse in meinen Augen richtig.

              ABER, dennoch muss hier noch etwas falsch sein, denn folgendes Szenario habe ich getestet:

              Es gab bereits einen Termin am 28.06.2021 mit service 1
              User wählt service 2 aus und es wird richtigerweise nur noch 16:00 und 18:00 Uhr als freies Zeitfenster angezeigt.
              ABER: service 2 darf nicht um 18 Uhr gebucht werden, da service 1 im Vorfeld verfügbar ist.

              Kurz gesagt: Service 2 darf niemals nach einem Service 1 oder 3 buchbar sein.
              Benötige bitte bitte noch mal Hilfe - vielen lieben Dank !


              Kommentar


              • #22
                kurz gesagt: crosspost. https://www.datenbankforum.com/threa...46/#post-35263
                PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                Kommentar


                • #23
                  und ? wenn man mehrere Tage nichts mehr hört, spricht in meinen Augen nichts dagegen, anderweitig nach Hilfe zu suchen. Deine Antwort war zu diesem Beitrag jetzt leider nicht hilfreich

                  Kommentar


                  • #24
                    Nach welchem Kalender liegen zwischen 18.6. und 19.6. mehrere Tage?

                    Kommentar


                    • #25
                      Naja. Meine letzte Nachricht #21 war vom 19.06
                      Heute ist der 22.06

                      Kommentar


                      • #26
                        Zitat von Ghost109 Beitrag anzeigen
                        Naja. Meine letzte Nachricht #21 war vom 19.06
                        Heute ist der 22.06
                        Und das Crossposting war am 19.6.

                        Außerdem wenn du es eilig hast, dann ist ein Forum die falsche Anlaufstelle. Dann solltest du dich besser gegen Bezahlung an einen Profi wenden, wenns so dringend ist.

                        Kommentar


                        • #27
                          Zitat von Ghost109 Beitrag anzeigen
                          Es gab bereits einen Termin am 28.06.2021 mit service 1
                          User wählt service 2 aus und es wird richtigerweise nur noch 16:00 und 18:00 Uhr als freies Zeitfenster angezeigt.
                          ABER: service 2 darf nicht um 18 Uhr gebucht werden, da service 1 im Vorfeld verfügbar ist.

                          Kurz gesagt: Service 2 darf niemals nach einem Service 1 oder 3 buchbar sein.
                          Benötige bitte bitte noch mal Hilfe - vielen lieben Dank !
                          Wird es besser, wenn du wie ich es in #12 vorgeschlagen habe, statt e_serviceA.service=2 und e_serviceB.service=2 jeweils die 3 statt der 2 nimmst?

                          Kommentar


                          • #28
                            rkr Danke das du dich meldest
                            Werde es nachher sofort testen. Danke !!

                            Kommentar


                            • #29
                              Leider nein. Hier wird mir immer "NULL" angezeigt". habe aber an bestimmten Tagen Termine und dennoch wird "NULL" statt blocked angezeigt, obwohl die Kombination nicht machbar sein sollte.

                              Kommentar


                              • #30
                                Wahrscheinlich müsste, um die Logik von #13 richtig zu erfüllen bei dem JOIN e_serviceA hinten stehen e_serviceA.service=2
                                Und bei e_serviceB müsste hinten stehen e_serviceB.service IN (1, 3)

                                Aber ist das echt so schwer nachvollziehbar?

                                Kommentar

                                Lädt...
                                X