Zum Inhalt springen

php/sql abfrage öffnungszeiten


Empfohlene Beiträge

hi und hallo. mal wieder ein komisches problem das ich habe und ich find nix im web dazu...

ich habe eine tabelle mit standard öffnungszeiten

tag

von

bis

das von/bis feld-format ist HH:MM

ich habe in einer anderen tabelle ausnahmeöffnungszeiten im selben format formatiert.

nun will ich, sagen wir z.b. für eine restaurantKETTE für jedes restaurant, die öffnungszeiten an einem tag ausgeben. dabei müssen aber die ausnahmen berücksichtigt werden.

es gibt nur eine öffnungszeit pro tag

es gibt nur eine ausnahme pro tag

dazu benötige ich sowas wie eine logische UND-verknüpfung zwischen den satndard und ausnahmezeiten an einem tag.

beispiel:

- restaurant1 hat mittwochs normalerweise von 15:00 bis 20:00 uhr geöffnet

- restaurant2 hat mittwochs normalerweise von 8:00 bis 16:00 uhr geöffnet

- für den heutigen mittwoch liegt aber eine ausnahme vor:

"heute haben alle restaurants von 12:00 bis 14:00 uhr betriebsversammlung, also geschlossen.

die öffnungszeit aller restaurants ist heute von 14:00 bis 24:00"

jetzt brauche ich also besagte logische UND-erknüpfung um herauszufinden dass

restaurant1 von 15:00 bis 20:00

restaurant2 von 14:00 bis 16:00

geöffnet hat.

wichtig: restaurant2 hat, obwohl es ja ab 8:00 uhr offen HÄTTE auch erst ab 14:00 geöffnet, da die ausnahme anfangszeit vorang hat, ausser sie liegt vor der standard öffnungszeit wie das bei restaurant 1 der fall ist. restaurant 1 hat trotzdem erst ab 15:00 offen.

puhh, das ist echt mal wieder ein typisches forTeesSake problem.

ich weiss nicht, ob sich das schon in der sql-abfrage, oder erst in php lösen lässt. deswegen habe ich mal im skript/webserver bereich gepostet.

wäre dankbar für jeden ansatz und hoffe irgendjemand versteht mich hehe ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

tag

von

bis

das von/bis feld-format ist HH:MM

Datentyp Varchar oder was?

ich habe in einer anderen tabelle ausnahmeöffnungszeiten im selben format formatiert.

nun will ich, sagen wir z.b. für eine restaurantKETTE für jedes restaurant, die öffnungszeiten an einem tag ausgeben. dabei müssen aber die ausnahmen berücksichtigt werden.

es gibt nur eine öffnungszeit pro tag

es gibt nur eine ausnahme pro tag

das es nur eine öffnungszeit gibt, irritiert mich, habt ihr keine Mittagspausen berücksichtigt? Ihr speichert also für jedes Datum also eine Zeit? Sprich (max) 365 Einträge pro Geschäft?

dazu benötige ich sowas wie eine logische UND-verknüpfung zwischen den satndard und ausnahmezeiten an einem tag.

beispiel:

- restaurant1 hat mittwochs normalerweise von 15:00 bis 20:00 uhr geöffnet

- restaurant2 hat mittwochs normalerweise von 8:00 bis 16:00 uhr geöffnet

- für den heutigen mittwoch liegt aber eine ausnahme vor:

"heute haben alle restaurants von 12:00 bis 14:00 uhr betriebsversammlung, also geschlossen.

die öffnungszeit aller restaurants ist heute von 14:00 bis 24:00"

jetzt brauche ich also besagte logische UND-erknüpfung um herauszufinden dass

restaurant1 von 15:00 bis 20:00

restaurant2 von 14:00 bis 16:00

geöffnet hat.

In P-Code: If(Ausnahme) { berechneÖffnugszeit (StandartÖffnugszeit); }

wichtig: restaurant2 hat, obwohl es ja ab 8:00 uhr offen HÄTTE auch erst ab 14:00 geöffnet, da die ausnahme anfangszeit vorang hat, ausser sie liegt vor der standard öffnungszeit wie das bei restaurant 1 der fall ist. restaurant 1 hat trotzdem erst ab 15:00 offen.

puhh, das ist echt mal wieder ein typisches forTeesSake problem.

ich weiss nicht, ob sich das schon in der sql-abfrage, oder erst in php lösen lässt. deswegen habe ich mal im skript/webserver bereich gepostet.

wäre dankbar für jeden ansatz und hoffe irgendjemand versteht mich hehe ;)

Siehe Bemerkungen im Quote, generell kannst du dir mit Joins alle relevanten Daten liefern lassen, allerdings wirst du die Berechnung der Öffnungszeiten sicher in PHP machen müssen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

datentyp ist time()

es werden 7 einträge pro restaurant gespeichert. öffnungszeiten von montag bis sonntag. keine mittagspausen.

und um die berechnung geht es mir ja. ich werde das morgen mal ausführen aber hier ein kleiner vorgeschmack:

A1 = Anfangszeit 1

A2 = Anfangszeit 2

E1 = Endezeit 1

E2 = Endezeit 2

A1 > A2 ? dann E1 > E2 ? -> öffnung von A1 bis E2

A1 > A2 ? dann E1 < E2 ...

A1 = A2 ? E1 > E2

A1 = A2 ? E1 < E2

A1 > A2 ? E1 = E2

A1 < A2 ? E1 = E2

und soweiter und sofort. ich scheue mich einfach vor solchen langen if abfragen und denke dass es evtl. eine php oder mysql funktion gibt in der man das berechnen könnte. sowas wie ne "timerange" in der beide zeiten liegen, oder eben das logische UND...

Link zu diesem Kommentar
Auf anderen Seiten teilen


SELECT

(

IF EXISTS( SELECT von FROM ausnahmen WHERE tag = {$tag}) 

THEN SELECT von FROM ausnahmen WHERE tag = {$tag}

ELSE SELECT von FROM normal WHERE tag = {$tag}

END IF

) as Von,

(

IF EXISTS( SELECT bis FROM ausnahmen WHERE tag = {$tag}) 

THEN SELECT bis FROM ausnahmen WHERE tag = {$tag}

ELSE SELECT bis FROM normal WHERE tag = {$tag}

END IF

) as Bis

ungetestet

Link zu diesem Kommentar
Auf anderen Seiten teilen

hi kills, leider nicht richtig. es geht nicht darum OB eine ausnahmeÖffnungszeit vorliegt, sondern ich muss diese gegenüber dem standard "aufrechnen"

also: ein restaurant

standard anfangszeit(AS) 10:00

standard endezeit(AE) 20:00

heute liegt eine restaurantübergreifende ausnahmeöffnungszeit vor:

ausnahme anfangszeit(AA) 12:00

ausnahme endezeit(AE) 22:00

somit hat dieses restaurant von 12:00 bis 22:00 geöffnet

im endeffekt isses ganz einfach habe ich gerade ausgetüftelt.

es gibt nur folgende fälle


pseudo


if AA > AS AND AA < ES //ausnahme anfang liegt innerhalb der standard öffnungszeit(ÖZ)

    IF EA < ES //ausnahme ende liegt auch innerhalb der standardÖZ

        return AA und EA //es gilt nur die ausnahmeÖZ

    ELSE

        //asnahmeEndeÖZ ist grösser als standardEndeÖZ

        return AA und ES //es gilt ausnahmeAnfangsÖZ und standardEndeÖZ


das selbe gilt für die endeÖZ nur umgedreht

hehe, man muss sich nur zwei zahlensträhle (strähle??? lustiges wort;) ) untereinander vorstellen und die gemeinsamkeit rausfinden.

vielen dank an alle die sich gedanken gemacht haben.

bis zum nächsten mal (und das kommt bestimmt)

Link zu diesem Kommentar
Auf anderen Seiten teilen

oh-ma-goodness. es geht noch so viel einfacher..

das modell:

A1 E1 (anfang1 ende1)

A2 E2 (anfang2 ende2)

wenn A2 < A1 dann tausche werte A1 und A2

wenn E2 < E1 dann tausche werte E1 und E2

somit liegt dann A2 und E2 immer innerhalb A1 und E2, bildet also immer die schnittmenge und ist somit das gewollte ergebnis.

mann mann. ich hätte einfach mal zu programmieren anfangen sollen.

voll der zufall dass ich da drauf gekommen bin jibbi

Link zu diesem Kommentar
Auf anderen Seiten teilen

so, juhu, ich hab ja damit gedroht. jetzt kommt nochmal was lustiges. sollte aber eigentlich einfach sein.

in meiner tabelle habe ich ein "anzeigenBis" datum als timestamp.

ich möchste nun wissen ob vom heutigen wochentag ab bis zum "anzeigenBis" datum der heutige wochentag nochmal vorkommt.

mir fehlt das werkzeug, oder die zündende idee.

beispiel:

- heute ist donnerstag der 20.01.2005

- anzeigeBis datum: 28.01.2005

-> ja, am 27.01.2005 ist nochmal ein donnerstag

- heute ist donnerstag der 20.01.2005

- anzeigeBis datum: 20.01.2005

-> ja, anzeige bis heute, dann immer ok

- heute ist donnerstag der 20.01.2005

- anzeigeBis datum: 26.01.2005

-> NEIN, denn der 26. ist ein mittwoch, kein donnerstag dazwischen

gibts da nich was von mysql?? ;)

dangö schonmal

Link zu diesem Kommentar
Auf anderen Seiten teilen

anderes problem aufegetaucht, dessen lösung mir nicht klar ist:

ich habe zwei timestamps. ich möchte nun wissen,

- wenn der heutige wochentag, also nicht das datum, nur der WEEKDAY(NOW()) zwischen den beiden timestamps vorkommt möchte ich mir das datum ausgeben lassen...

beispiel:

- heute ist freitag. egal welches datum

- ich habe zwei zeiten: von 25.01.2004 bis 31.01.2004.

-> kommt darin ein freitag vor?

-> wenn ja, welches datum hat er, und zwar der nächstliegendste?

->->ergebnis: am 28.01.2004 ist der nächste freitag in der zeitangabe.

das selbe ergebnis würde auch kommen wenn die "bisZeit" ins unendliche verlängert würde.

kann ich das in php lösen??

dankbar für jeden ansatz. :rolleyes:

Link zu diesem Kommentar
Auf anderen Seiten teilen

nee, das hilft nicht leider...

ich habe jetzt gerade eine lustige lösung fertiggestellt. und sie funktioniert.

- ich hole mir aus der datenbank das anfangsDatum und das endeDatum

- beides mit TO_DAYS

- in php mache ich dann eine forschleife vom "TO_DAYS anfangsDatum" bis zum "TO_DAYS endeDatum", also z.b. von 73322 bis 75000

- dann frag ich in mysql wieder den wochentag per FROM_DAYS($schleifenvariable) ab und vergleiche mit dem wochentag um den es geht.

- wenn der wochentag dabei kommt noch ein break; um nicht unnütz weiterzusuchen.

das wars.

lustich ;)

vielen dank an alle die sich gedanken gemacht haben

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...