Hast du das Prinzip denn verstanden und funktioniert die Abfrage so, wie du sie brauchst?
Ankündigung
Einklappen
Keine Ankündigung bisher.
SQL Abfrage erweitern
Einklappen
Neue Werbung 2019
Einklappen
X
-
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
-
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 day, seq_14_to_18 AS hour
) t
LEFT JOIN
events e_serviceA ON t.timeslots BETWEEN DATE_SUB(e_serviceA.start, INTERVAL 4 HOUR) AND DATE_ADD(e_serviceA.start, INTERVAL 59 MINUTE) AND e_serviceA.service=2
LEFT JOIN
events e_serviceB ON t.timeslots BETWEEN e_serviceB.start AND DATE_ADD(e_serviceB.start, INTERVAL 239 MINUTE) AND e_serviceB.service=2
GROUP BY
t.timeslots
HAVING
`service13` IS NULL
ORDER BY
t.timeslots
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 `service13` IS NULL AND timeslots NOT IN ( SELECT `start` FROM `events`)
PHP-Code:HAVING `service2` IS NULL AND timeslots NOT IN ( SELECT `start` FROM `events`)
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
-
kurz gesagt: crosspost. https://www.datenbankforum.com/threa...46/#post-35263PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Kommentar
-
Zitat von Ghost109 Beitrag anzeigenNaja. Meine letzte Nachricht #21 war vom 19.06
Heute ist der 22.06
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
-
Zitat von Ghost109 Beitrag anzeigenEs 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
Kommentar