c'est mon schéma de base de données strong>
Query pour montrer des chambres sans réservation forte> p> Après avoir effectué une réservation par exemple de 2019-07-12 à 2019-07-14 dans la chambre n ° 1, puis faisant de la requête SQL avec datein 2019-07-12 et datetone 2019-07-14, en tant que Réponse Je reçois la chambre n ° 1, ce qui n'est pas correct, car dans cette propagation de la réservation de temps OD a été faite. p> p>
4 Réponses :
Votre ce qui signifie: L'invité actuel partira avant que celui-ci arrive ou que le prochain invité arrivera après celui-ci. feuilles. p> p> où la clause code> est incorrecte, essayez:
Vous pouvez utiliser non pas existant et appliquer les conditions:
SELECT r.id FROM room r
WHERE NOT EXISTS (
SELECT 1 FROM reservation rs
WHERE rs.room_id = r.id AND (
(rs.date_in BETWEEN :dateIn AND :dateOut) OR
(rs.date_out BETWEEN :dateIn AND :dateOut) OR
(rs.date_in < :dateIn AND rs.date_out > :dateOut)
)
)
Je ne pense pas que ce soit la meilleure logique, mais cela ne mérite certainement pas un bowvote.
Peut-être que ce n'est pas la meilleure logique, mais au moins cela mérite une explication.
Vous voulez exclure les réservations contradictoires.
Commençons par examiner la période demandée (... B) et une réserve hypothétique (c ... d), nous pouvons diagramme toutes les possibilités et voir qu'il y a plusieurs Possibilités de conflit: P>
CREATE INDEX reservations_chk ON reservations(room_id, date_in, date_out, rs_id);
J'utiliserais La logique pour les intervalles de temps qui se chevauche est en fait simple - mais peut-être délicat. Deux intervalles se chevauchent lorsque ce qui suit est vrai: p> Si les extrémités sont incluses dépendent de vos règles commerciales particulières. La logique ci-dessus permet à quelqu'un de s'enregistrer à la même date que quelqu'un d'autre vérifie. P> Vous pouvez en formuler une phrase comme un n'existe pas code> et la logique suivante:
rejoindre code>. Je trouve que n'existe pas code> mieux capture exactement ce que vous essayez de trouver - une chambre sans réservation au cours d'une période donnée. P> P>