forTeesSake Geschrieben 19. Januar 2005 Teilen Geschrieben 19. Januar 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 19. Januar 2005 Autor Teilen Geschrieben 19. Januar 2005 bin nicht ungeduldig, aber wenn es jemand nicht verstanden hat, sich aber trotzdem mit der materie sql/php/zeitfunktionen... auskennt, kann er gerne auch hier reinschreiben dass ich es nohmal oder besser erklären, bzw. additional info rausrücken soll. vielen dank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
.vash Geschrieben 19. Januar 2005 Teilen Geschrieben 19. Januar 2005 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 19. Januar 2005 Autor Teilen Geschrieben 19. Januar 2005 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 20. Januar 2005 Teilen Geschrieben 20. Januar 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 20. Januar 2005 Autor Teilen Geschrieben 20. Januar 2005 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) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 20. Januar 2005 Teilen Geschrieben 20. Januar 2005 vielen dank an alle die sich gedanken gemacht haben. bis zum nächsten mal (und das kommt bestimmt) Problem gelöst? Wie? SQL? PHP? dein Ansatz? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 20. Januar 2005 Autor Teilen Geschrieben 20. Januar 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 20. Januar 2005 Autor Teilen Geschrieben 20. Januar 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 21. Januar 2005 Autor Teilen Geschrieben 21. Januar 2005 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 21. Januar 2005 Autor Teilen Geschrieben 21. Januar 2005 vielleicht gibt es in php eine funktion wie in mysql "TO_DAYS" also die tage seit dem jahr 0 ??? dann könnte ich eine forschleife von TO_DAYS(anfangsDatum) bis TO_DAYS(endeDatum) machen, und sobald ich auf einen gewünschten wochentag stosse aufhören. dann hätte ich was ich bräuchte... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Wolle Geschrieben 21. Januar 2005 Teilen Geschrieben 21. Januar 2005 Ich habs nur überflogen, kann also auch sein, das ich falsch liege, aber das hört sich passend für dich an: http://de2.php.net/manual/en/function.localtime.php Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 21. Januar 2005 Autor Teilen Geschrieben 21. Januar 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.