• hi,

    ich arbeite an einem reservierungssystem und hab bei der abfrage nach dem freien equipment für den zeitraum a bis b folgendes problem:

    reservierungen werden immer mit 2 datumsangaben gespeichert (zB start: 2009-11-06 und ende: 2009-11-07). equipment das bis tag x reserviert ist, kann am gleichen tag wieder ausgeliehen werden (weil die rückgabe immer vor der entlehnung erfolg, nur nebenbei).

    d.h. bei der abfrage habe ich folgende kriterien für freies equipment:
    ende der vorherigen reservierung <= gewünschtes start-datum
    anfang der nachfolgenden reservierung >= gewünschtes enddatum.

    ansich ja ganz logisch und einfach. d.h. wenn etwas von 13. bis 20.12 reserviert ist, kann ichs mir ab dem 20.12 wieder ausborgen. nur ist es so, dass genau dann, wenn etwas bis tag x reserviert ist und ichs ab tag x haben will, das nicht geht, weil das equipment noch als ausgeborgt angezeigt wird (obwohl ich ja kleinergleich/größergleich und nicht kleiner/größer verwendet hab). kanns sein, dass man beim datum anders vergleichen muss??

    ich schreib das ganze in symfony, daher bringt der code glaub ich relativ wenig (sofern man sich nicht in symfony auskennt). den folgenden code nutze ich, um an das bereits reservierte equipment zu kommen:

    Code
    $c = new Criteria();
    $c->addJoin(GeraetPeer::ID, Reservierung2Peer::GERAET);
    $c->addJoin(Reservierung2Peer::RESERVIERUNG, ReservierungPeer::ID);
    $c->add(ReservierungPeer::ENDE, $this->anfang, Criteria::GREATER_EQUAL);
    $c->add(ReservierungPeer::BEGINN, $this->ende, Criteria::LESS_EQUAL);
    $this->equipment = GeraetPeer::doSelect($c);

    any ideas? oder war meine beschreibung noch zu ungenau?

  • aehm, wie waers mit nem zusaetzlichen eintrag "returned", den du noch zueaetzlich abfragst. kann boolean oder timestamp sein

    Otto: Apes don't read philosophy. - Wanda: Yes they do, Otto, they just don't understand
    Beleidigungen sind Argumente jener, die über keine Argumente verfügen.
    «Signanz braucht keine Worte.» | «Signanz gibts nur im Traum.» 

    Das neue MTB-Projekt (PO, Wiki, Mitschriften, Ausarbeitungen, Folien, ...) ist online
    http://mtb-projekt.at

  • obwohl ich ja kleinergleich/größergleich und nicht kleiner/größer verwendet hab

    Ist nicht genau das das Problem? Du hast das Problem, wenn eingegebenes Datum und gespeichertes Datum gleich sind.

    aehm, wie waers mit nem zusaetzlichen eintrag "returned", den du noch zueaetzlich abfragst. kann boolean oder timestamp sein

    Du hast nicht verstanden, was drummingchris will. Er speichert in seinem System Geräte und Reservierungen, letztere immer mit Start- und Enddatum. Wenn der Benutzer jetzt eine neue Reservierung mit Start- und Enddatum eingibt, sollen alle Reservierungen ausgegeben werden, die mit der neuen Reservierung zeitlich kollidieren.

  • mögliche ursache kann auch am date selbst liegen. in der datenbank wird der komplette timestamp gespeichert (also mit uhrzeit) und vertraue nicht darauf, dass die uhrzeit mit "0" hinterlegt ist. wenn du es nur tag-genau brauchst, dann solltest du auch nur den tag in deinem vergleich verwenden.

    Im nächsten Leben werd ich ein Koala:
    21 Stunden schlafen und 3 Stunden fressen!

    Einmal editiert, zuletzt von dowi (6. November 2009 um 18:57)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!