Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Zeitüberschneidungen berechnen (https://www.delphipraxis.net/128402-zeitueberschneidungen-berechnen.html)

quendolineDD 29. Jan 2009 10:42

Datenbank: MySQL • Version: 5.0.51 • Zugriff über: localhost

Zeitüberschneidungen berechnen
 
Hallo DP.

Mein SQL ist etwas eingefroren.
Ich will in meiner DB die Zeitüberschneidungen in einer Tabelle errechnen.
Dabei habe ich folgende Werte mit denen ich überprüfe: eine Gruppen-ID, ein Datum, eine Start- und Endzeit.
Ich will überprüfen, bei welchen gleichen Gruppen-IDs eine Zeitüberschneidung am gleichen Tag stattfinden. D.h. es können täglich mehrere Termine für eine Gruppe stattfnden, jedoch sollten diese sich nicht überschneiden.

Mir misfällt nun, wie ich mit einem Datensatz durch die anderen iterieren kann, um diese gegenseitig zu überprüfen. Würde das ganze gerne auf den SQL-Server auslagern, und das nicht im Programm selber machen.

Hier noch meine Tabelle:
Code:
--------------------------------------------------
| TID | GID | Datum | Start | Ende | Bezeichnung |
--------------------------------------------------
Lg

mkinzler 29. Jan 2009 10:57

Re: Zeitüberschneidungen berechnen
 
Ich würde das vor dem Eintragen überprüfen:

SQL-Code:
select * from <Tabelle> where Datum = :datum and start <= :ende and ende >= :ende;

quendolineDD 29. Jan 2009 11:19

Re: Zeitüberschneidungen berechnen
 
Vielleicht das Beste.
Dabei muss jedoch beachtet werden, das es 3 Fälle von Überschneidungen gibt.
1. die Anfangszeit2 liegt im Zeitraum1 oder
2. die Endzeit2 liegt im Zeitraum1 oder
3. Der Zeitraum1 liegt im Zeitraum2.

Hab daraus erstmal

SQL-Code:
select count(tid) from tbl_termin where gid=:id and datum=:date and ((startzeit <= :start) and (:start <= Endzeit) or ((Startzeit <= :ende) and (:ende <= Endzeit)) or ((:start <= Startzeit) and (:ende >= Endzeit)))
gemacht.

Klaus01 29. Jan 2009 11:33

Re: Zeitüberschneidungen berechnen
 
Hallo Lars,

eine kleine Anmerkung am Rande:
Wäre es nicht besser dem User die bereits gebuchten Zeiten für eine Gruppe
grafisch anzuzeigen. Dann hat er/sie es in der Hand einen Termin zu finden.
Ich als User würde es als etwas lästig empfinden, Zeiträume zu "buchen"
und dann gesagt zu bekommen das dieser Zeitraum schon irgendwie belegt ist.

Grüße
Klaus

quendolineDD 29. Jan 2009 11:53

Re: Zeitüberschneidungen berechnen
 
Sicher wäre es das. Ein Benutzer steht nur zu einer Gruppe zu einer m:n-Relation, und die Termine aller Gruppen können sich immer noch überschneiden.
Im endefekt handelt es sich hier um ein Projekt für den Schulunterricht, wobei mir dann eine mäßig angelegte Benutzerausrichtung ausreicht.

mkinzler 29. Jan 2009 12:28

Re: Zeitüberschneidungen berechnen
 
Zitat:

Dabei muss jedoch beachtet werden, das es 3 Fälle von Überschneidungen gibt.
Das sollte eigentlich in der enen Abfrage alles drin sein.

Sir Rufo 29. Jan 2009 13:42

Re: Zeitüberschneidungen berechnen
 
Zitat:

Zitat von mkinzler
Ich würde das vor dem Eintragen überprüfen:
SQL-Code:
select * from <Tabelle> where Datum = :datum and start <= :ende and ende >= :ende;

das funktioniert nicht ...
SQL-Code:
select * from <Tabelle> where Datum = :datum and start <= :ende and ende >= :start;
so tut das jetzt auch ;) wahr wohl nur ein Vertipper ...

mkinzler 29. Jan 2009 13:43

Re: Zeitüberschneidungen berechnen
 
Zitat:

so tut das jetzt auch Wink wahr wohl nur ein Vertipper ...
Ja so war es gemeint


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz