Öffnungszeiten in MySQL umsetzen

Hallo,
ich schreibe gerade eine DB, in der Arzt-Praxen erfasst werden soll. Adresse und Name usw. ist ja kein Problem, aber irgendwie komme ich bei den Öffnungszeiten auf keine vernünftige Lösung, die man auch einfach abfragen kann.
Zur Klärung ein Beispiel:
Praxis 1: Öffnungszeiten Mo, Di, Do, Fr 8.00-12.00 u. 15.00-17.00
Praxis 2: Öffnungszeiten Mo 10.00-18.00; Di, Do, Fr 09.00-12.30
(an nicht aufgeführten Tagen ist geschlossen)

Mit einer Abfrage soll man jetzt z.B. herausbekommen, welchen Praxen Di um 08.30 geöffnet haben.
Bevor ich aber ein SELECT dazu zusammenbasteln kann, muss ich eine vernünftige Tabelle Öffnungszeiten erstellen, habe aber totale Ladehemmung. Euch Experten fällt aber bestimmt was dazu ein.

Vielen Dank schon mal
Marvin

Praxis 1: Öffnungszeiten Mo, Di, Do, Fr 8.00-12.00 u.
15.00-17.00
Praxis 2: Öffnungszeiten Mo 10.00-18.00; Di, Do, Fr
09.00-12.30
(an nicht aufgeführten Tagen ist geschlossen)

Hallo Marvin,

die Tabelle sollte neben einer Praxis_id, die 7 Wochentage (okay ggf. 5 oder auch 6 Arbeitstage)(mit Booleanwert für geöffnet am Wochentag) und eine Start- und Endezeitpunkt haben.
Praxis 1 und 2 erhält jeweils zwei Einträge

ID Mo Di Mi Do Fr Sa So vonUhr bisUhr
1 Y Y N Y Y N N 08:00 12:00
1 Y Y N Y Y N N 15:00 17:00
2 Y N N N N N N 10:00 18:00
2 N Y N Y Y N N 09:00 12:30

Wenn man Mittagspause und alle Wochentage einbezieht kann eine Praxis bis zu 14 Einträge erhalten.
Das kann man forcieren, wenn man den 7 Tagen nur ein Feld Wochentag einrichtet. Dann hätte Praxis 1 8 Einträge und Praxis 2 4 Einträge.

MfG Georg V.

P.S.: Ich würde noch ein Gültigkeitzeitraum eintragen. Es könnte ja sein, dass eine Praxis im Sommer andere Öffnungszeiten hat als im Winter.

Hi!

Ich bring mal einen zweiten Ansatzpunkt rein:

ID TAG VON BIS GUELTIG\_VON GUELTIG\_BIS
1 MO 08:00 12:00 01.01.2008
1 DI 08:00 12:00 01.01.2008
1 DO 08:00 12:00 01.01.2008
1 FR 08:00 12:00 01.01.2008
2 MO 10:00 17:00 01.01.2008 30.06.2008
2 MO 10:00 18:00 01.07.2008
usw

P.S.: Ich würde noch ein Gültigkeitzeitraum eintragen. Es
könnte ja sein, dass eine Praxis im Sommer andere
Öffnungszeiten hat als im Winter.

Hab ich gemacht:wink:

Du willst jetzt gerade (wir nehmen an, es sei Montag, 18.8.2008, 11Uhr) wissen, wer offen hat? Unter Oracle:

select praxis.name,zeit.von,zeit.bis
 from praxis,zeit
 where praxis.id = zeit.id
 and to\_char(sysdate,'DY') = zeit.tag
 and sysdate between trunc(sysdate)+zeit.von
 and trunc(sysdate)+zeit.bis
 and trunc(sysdate) between trunc(gueltig\_von)
 and nvl(gueltig\_bis,sysdate)

praxis.name zeit.von zeit.bis
----------- -------- --------
ARZT1 08:00 12:00
ARZT2 10:00 18:00

Natürlich nur eine von x beliebigen Lösungen

Grüße,
Tomh

PS: Natürlich hab ich das jetzt nicht getestet …

Hallo Georgh und Tomh,
vielen Dank für eure Lösungsansätze, ihr habt mich unheimlich vorangebracht. Muss jetzt erstmal testen, welcher Ansatz effektiver ist.

Viele Grüße
Marvin