Datumsproblem...denkanstoss

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

  • Datumsproblem...denkanstoss

    Hi Zusammen,

    ich möchte eine kleine Termindatenbank erstellen. Dabei soll eine Hauptfunktion sein, dass man z.B. Räume für mehrere Tage buchen kann. Also z.B. vom 25.4.2003 bis 3.5.2003.

    Den Datumsbereich kann ich ja einfach mit einem html-Formular abfragen (Startdatum und Enddatum). Diese 2 Werte schreib ich in eine MySQL Datenbank.

    Nun soll aber geprüft werden, ob innerhalb des Zeitraumes, der in dem HTML-Formular eingegeben wird, der Raum bereits belegt ist und wenn ja, eine Meldung ausgegeben werden.

    Hat dazu jemand einen Denkanstoss ? Wie kann ich einen Datumsbereich mit den Datumswerten in der DB vergleichen ?

    Google hat nix vernünftiges ausgegeben (oder ich hab falsch gefragt)....

    bitte, danke.... Bernd

    THIS POST IS WITH 100% RECICLING ELECTRONS CREATED

  • #2
    Als erstes solltest Du Start- und Enddatum in einem Attribut des Datentyps DATE speichern.

    Dann natürlich die eingegebenen Daten in's ISO-Format ( YYYY-MM-DD ) umwandeln ...

    Und dann sollte auch ein Statement wie:
    Code:
    SELECT COUNT(*)
      FROM termine
     WHERE '$start' BETWEEN start AND ende
        OR '$ende' BETWEEN start AND ende
    Dir ein entsprechendes Ergebnis liefern ( 0 wenn keine Datumsüberschneidung, != 0 wenn Datumsüberschneidung) ...
    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Comment


    • #3
      Daumsproblem

      WOW !

      du hast bestimmt dagesessen und auf meine Frage gewartet oder ? ging ja blitzschnell. Danke ! Damit komm ich weiter.

      Schöne Nacht noch....

      Bernd

      Comment


      • #4
        Tja ... es ist ganz schön langweilig mit 'nem Hexenschuß und 'nem Notebook auf dem Bett zu liegen ...
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Comment


        • #5
          *g*

          Ich nehm deinen Hexenschuß, wenn du meine 2 kleinen Kinder nimmst. Du kannst wenigstens in ruhe arbeiten wenn und wann du willst und hast es in ein paar Tagen überstanden.....ich hab "Lebenslänglich"

          so long, Bernd

          Comment


          • #6
            Ok ... ich seh's ein ... dich hat's schlimmer getroffen ...
            carpe noctem

            [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
            [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

            Comment


            • #7
              ups...dein select is falsch...

              hi goth,

              Dein Select oben:

              SELECT COUNT(*)
              FROM termine
              WHERE '$start' BETWEEN start AND ende
              OR '$ende' BETWEEN start AND ende

              der haut nicht ganz hin. Wenn z.B. eine Reservierung im Zeitraum 10.4.2003 bis 15.4.2003 vorligt, dann ist eine Buchung laut deinem select vom 8.4.2003 bis 19.4.2003 zulässig. Das stimmt aber nicht.

              ich habs jetzt mal so gemacht:
              ('$buchen_start'>=start and '$buchen_start'<=stop) or
              ('$buchen_stop'>=stop and '$buchen_stop'<=start)

              Scheint zu funktionieren. Mensch.....dabei mach ich das doch für einen Auftrag den ich von der Atomenergiekommisionsbehörde bekommen hab und es soll mit dem Script überprüft werden, ob die Lagerräume für Atombrennstäbe noch frei sind. Jetzt überleg mal was da passiert wäre, wenn da plötzlich die 3 oder 4-fache Menge an Nuklearem Material in einem Raum gelegen hätte.... Bumm ..... sag ich da nur. Puh.....ich habs ja zum glück noch bemerkt....

              Im Ernst : deine Antwort mit dem between hat mir geholfen, da ich das noch nicht kannte und ich immer gerne was dazu lerne.

              so long, bernd

              Comment


              • #8
                man kann das aber auch mit BETWEEN erledigen:

                PHP Code:
                SELECT ruser_id FROM resp WHERE res_id = {RESOURCEN_ID
                AND 
                '{START}' BETWEEN rstart AND rende OR '{ENDE}' BETWEEN rstart 
                and rende OR rstart BETWEEN '{START}' AND '{ENDE}' 
                OR rende BETWEEN '{START}' AND '{ENDE}' 

                wobei für {START} und {ENDE} die Zeiten eingesetzt werden müssen.

                Die dazugehörige Tabelle:
                CREATE TABLE `resp` (
                `ID_res` int(10) unsigned NOT NULL auto_increment,
                `res_id` smallint(5) unsigned default '0',
                `rstart` datetime NOT NULL default '2000-01-01 01:01:01',
                `rende` datetime NOT NULL default '2000-01-01 01:01:01',
                `ruser_id` int(10) unsigned NOT NULL default '0',
                PRIMARY KEY (`ID_res`)
                ) TYPE=MyISAM COMMENT='Resourcenplaner';

                res_id steht für die ID der Resource (ein Raum, ein Auto, ein Beamer), die in einer separaten Tabelle verwaltet werden ...

                dabei bekommt man entweder NULL, wenn die Ressource frei ist, oder die User ID des Users, der die Resource reserviert hat ...

                Grüzze
                CB
                Last edited by i2dx; 29-04-2003, 14:21.
                Hans Matthöfers Widerspruch zur Expertenerkenntnis: Künstliche Intelligenz ist besser als natürliche Dummheit.

                Comment

                Working...
                X