mysql: Designfrage / nochmal eine Rückfrage
bearbeitet von PitHallo Rolf,
> also ICH würde das mit einer Query lösen und die Tage nachher in der nachgelagerten Programmlogik abbilden.
>
OK, ich versuchs auch mal.
> Es gibt eine Menge Fälle (15, soweit ich weiß), wie sich zwei Zeiträume überlappen können, aber alle haben eins gemeinsam. Sei S der Suchzeitraum und T der Terminzeitraum, dann ist T relevant, wenn T.Ende >= S.Anfang UND T.Anfang <= S.Ende gilt. Oder andersrum mit de Morgan: T ist irrelevant, wenn T.Ende < S.Anfang ODER T.Anfang > S.Ende gilt.
>
Kann es sein, dass in meinem Fall der Ansatz `T.Ende > S.Anfang UND T.Anfang < S.Ende` sein sollte? Das würde die beiden Termine des User 1 bereits herausfiltern. >= und <= würde die Termine des User 1 hingegen einbeziehen. (Oder würde Dein 2.Teil mit MAX und MIN diese Termine ebenfalls herausfiltern? Den Teil verstehe ich nämlich noch nicht ganz.)
Edit: Nein, ich merke schon, >= und <= muß schon sein, das ansonsten ein Termin, der dem Suchzeitraum entspricht, nicht in der Ergebnismenge landen würde. Wie aber wird User 1 herausgefiltert?
Nochmal Edit: Das war Quatsch, weshalb ich den ersten Edit herauslöschen muß.
> Für die Treffer bildet man dann MAX(S.Anfang, T.Anfang) und MIN(S.Ende, T.Ende) und hat den gemeinsamen Bereich. Das kann man sogar schon vom SQL erledigen lassen.
>
Da ich diesen Teil noch nicht ganz verstehe: kannst du mir hierfür ein Beispiel geben, wie ich das in SQL umsetzen müßte?
Pit
mysql: Designfrage / nochmal eine Rückfrage
bearbeitet von PitHallo Rolf,
> also ICH würde das mit einer Query lösen und die Tage nachher in der nachgelagerten Programmlogik abbilden.
>
OK, ich versuchs auch mal.
> Es gibt eine Menge Fälle (15, soweit ich weiß), wie sich zwei Zeiträume überlappen können, aber alle haben eins gemeinsam. Sei S der Suchzeitraum und T der Terminzeitraum, dann ist T relevant, wenn T.Ende >= S.Anfang UND T.Anfang <= S.Ende gilt. Oder andersrum mit de Morgan: T ist irrelevant, wenn T.Ende < S.Anfang ODER T.Anfang > S.Ende gilt.
>
Kann es sein, dass in meinem Fall der Ansatz `T.Ende > S.Anfang UND T.Anfang < S.Ende` sein sollte? Das würde die beiden Termine des User 1 bereits herausfiltern. >= und <= würde die Termine des User 1 hingegen einbeziehen. (Oder würde Dein 2.Teil mit MAX und MIN diese Termine ebenfalls herausfiltern? Den Teil verstehe ich nämlich noch nicht ganz.)
Edit: Nein, ich merke schon, >= und <= muß schon sein, das ansonsten ein Termin, der dem Suchzeitraum entspricht, nicht in der Ergebnismenge landen würde. Wie aber wird User 1 herausgefiltert?
> Für die Treffer bildet man dann MAX(S.Anfang, T.Anfang) und MIN(S.Ende, T.Ende) und hat den gemeinsamen Bereich. Das kann man sogar schon vom SQL erledigen lassen.
>
Da ich diesen Teil noch nicht ganz verstehe: kannst du mir hierfür ein Beispiel geben, wie ich das in SQL umsetzen müßte?
Pit
mysql: Designfrage / nochmal eine Rückfrage
bearbeitet von PitHallo Rolf,
> also ICH würde das mit einer Query lösen und die Tage nachher in der nachgelagerten Programmlogik abbilden.
>
OK, ich versuchs auch mal.
> Es gibt eine Menge Fälle (15, soweit ich weiß), wie sich zwei Zeiträume überlappen können, aber alle haben eins gemeinsam. Sei S der Suchzeitraum und T der Terminzeitraum, dann ist T relevant, wenn T.Ende >= S.Anfang UND T.Anfang <= S.Ende gilt. Oder andersrum mit de Morgan: T ist irrelevant, wenn T.Ende < S.Anfang ODER T.Anfang > S.Ende gilt.
>
Kann es sein, dass in meinem Fall der Ansatz `T.Ende > S.Anfang UND T.Anfang < S.Ende` sein sollte? Das würde die beiden Termine des User 1 bereits herausfiltern. >= und <= würde die Termine des User 1 hingegen einbeziehen. (Oder würde Dein 2.Teil mit MAX und MIN diese Termine ebenfalls herausfiltern? Den Teil verstehe ich nämlich noch nicht ganz.)
> Für die Treffer bildet man dann MAX(S.Anfang, T.Anfang) und MIN(S.Ende, T.Ende) und hat den gemeinsamen Bereich. Das kann man sogar schon vom SQL erledigen lassen.
>
Da ich diesen Teil noch nicht ganz verstehe: kannst du mir hierfür ein Beispiel geben, wie ich das in SQL umsetzen müßte?
Pit