yo,
Das Problem ist, dass wenn man der Selektionsbedingung
AND tab2.begin <= tab1.end
hinzufügt, nur "direkte" Überlappungen berücksichtigt werden, aber nicht z.B. drei direkt hintereinanderliegende Termine (oder Termine, die sich "an den Rändern" überschneiden, die aber nicht alle "in den ersten Termin hineinragen").
ja, das ist ein problem, wir haben verkettungen von terminen. deswegen habe ich die strategie geändert, da du ja sowieso die zwischenräume haben willst.
macht schon sinn, solche doch etwas aufwänderingen abfragen selbst auszuprobieren, dann werden die probleme klarer, anstelle wie ich ständig herumzudoktern. leider musste ich erst mal den apache freund installieren, da meine alte mysql version keine unterabfragen kann und dann auch noch der alte apache bei bestimmten abfragen fehlermeldungen brachte. und dann auch noch das problem angehen, das dauert schon. ;-)
wir auch immer, ich habe (hoffentlich) eine lösung gefunden. anstelle die verkettung zu verfolgen, habe ich den datensatz gesucht, der keinen nachfolger hat. sein enddatum ausgegeben zusammen mit den nächsten beginn, dass sollte es sein.
beim letzten datensatz kommt natürlich ein NULL wert für den Start raus, da kann man einen anderen wert eintragen, wenn du willst. aber ich habe ihn erst mal so stehen lassen
SELECT tab1.id, tab1.end AS 'Start',
(
SELECT MIN(tab3.begin)
FROM termine AS tab3
WHERE tab3.begin > tab1.end
) AS 'Ende'
FROM termine AS tab1
WHERE
(
SELECT COUNT( * )
FROM termine AS tab2
WHERE tab1.end
BETWEEN tab2.begin
AND tab2.end
AND tab1.id <> tab2.id
) = 0
btw. vielen dfank für die tabellen struktur, ich habe aber die spalte date vermisst ?
gruß
Ilja