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:
$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?