Announcement

Collapse
No announcement yet.

Uhrzeitabfrage von bis

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Uhrzeitabfrage von bis

    hallo,
    eigentlich hört sich das problem ganz einfach, aber ...<BR>
    in einer tabelle für lokale stehen öffnungszeiten von und bis, wobei nur die uhrzeit betrachtet wird.<BR>
    es gibt folgende sonderzeiten:<BR>
    00:00:20 bedeutet durchgehend geöffnet<BR>
    00:00:30 open-end (nur in bis-spalte)<BR>
    00:00:10 geschlossen <BR>
    <BR>
    und nun gibt der anwender entweder als suchzeitraum 11:00 bis 23:00 oder 23:00 bis 03:00 oder 01:00 bis 06:00 an, wobei berücksichtigt werden soll, dass auch lokale angezeigt werden, die innerhalb der nächsten stunde des gesuchten zeitraumes öffnen.<BR>
    das problem bei der geschichte ist wohl, wenn zeiträume über mitternacht gehen.<BR>
    ich habe zwar eine lösung zusammengeschustert - sieht aber ziemlich kompliziert aus. vielleicht hatte einer von euch auch schon mal so eine problematik und eine saubere lösung dafür.<BR>
    vielen dank im voraus für die mühe, die ich gemacht hab' !

  • #2
    Wie waere es denn damit
    <PRE>
    WHERE (lokal_von <= (ende + 1)
    or
    lokal_bis >= start)
    OR lokal_bis IN (00:00:20, 00:00:10)
    AND lokal_bis != 00:00:10
    </PRE>
    START ist der Beginn der Anwendersuchzeitraums, ende ist das Ende des Anwendersuchzeitraums.
    Ein lokal ist geoffnet, wenn es vor dem Ende der Suchabfrage geöffnet wurde oder nach dem Start der Anfrage geschlossen ist. Was jetzt noch fehlt ist die naechste Stunde nach dem Suchzeitraum: Das sollte das "+1" erledigen.
    <BR>
    Stimmt's??
    Mal dir doch mal auf nem Stueck Papier die Zeitraume auf, die überlappen muessen (wie aufm Zahlenstrahl in der Schule), dann wirds klarer.

    Gruss

    Stefa

    Comment


    • #3
      das war auch mein erster ansatz und das ding mit dem zahlenstrahl hab ich auch gemacht, aber hast du deine oben beschriebene lösung auch mal getestet? da kommt nämlich murks bei raus! wenn start 01:00 und ende 03:00 eingegeben wird, erscheinen auch lokale die um 6:30 öffnen und schon um 22:00 schliessen.<BR>
      das kann's also nicht gewesen sein

      Comment


      • #4
        Tschuldigung, es muss heissen

        <PRE>
        WHERE ((lokal_von <= (ende + 1)
        AND (und nicht or)
        lokal_bis >= start)
        AND lokal_bis != 00:00:10 )
        OR lokal_bis IN (00:00:20, 00:00:10)
        </PRE>
        Das sollte es aber jetzt sein oder? Ich hab leider keine DB zum testen, sondern arbeite "offline". ;-(

        Gruss
        stefa

        Comment


        • #5
          Das koennte allerdings immer noch schief gehen, wenn der User eingibt 22 - 3 Uhr und die Kneipe von 1 - 5 geoeffnet ist.
          Mann sollte auf alle Uhrzeiten SYSDATE addieren. Und zwar sysdate - 1 auf VON wenn VON > BIS Uhrzeit ist und SYSDATE auf BIS. Dann kann der Zeitvergleich in jedem Fall richtig laufen. Das basiert auf der Annahme, dass wenn der User fuer VON einen groesseren WErt als BIS eingibt, die Abfrage über die Grenze zum naehcsten Tag geht. WEnn ich aber auf alle Daten ein Tagesdatum addiere, sollte es doch wieder funktionieren, oder

          Comment


          • #6
            hallo stefan, <br>
            auch dein letzter tip war nicht das tüpfelchen auf dem i. <br>
            genauso erging es mir ja auch von anfang an, dass man vom hundersten ins tausendste problemchen kam mit dieser simplen aufgabenstellung. wie gesagt, ein 'komplizertes' ergebnis habe ich bereits. ich dachte nur, irgendjemand hatte schon ein ähnliches problem und eine elegante lösung dafür.<br>
            trotzdem vielen dank für deine bemühungen

            Comment

            Working...
            X