-1
votes

Système de réservation d'hôtel, problème avec la requête SQL pour trouver des chambres gratuites

c'est mon schéma de base de données xxx

Query pour montrer des chambres sans réservation

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.


0 commentaires

4 Réponses :


0
votes

Votre où la clause est incorrecte, essayez: xxx

ce qui signifie: L'invité actuel partira avant que celui-ci arrive ou que le prochain invité arrivera après celui-ci. feuilles.


0 commentaires

0
votes

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)
  )
)


2 commentaires

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.



1
votes

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);


0 commentaires

0
votes

J'utiliserais n'existe pas et la logique suivante: xxx

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:

  • Le premier commence avant la seconde extrémité.
  • la première extrémité après le deuxième départ.

    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.

    Vous pouvez en formuler une phrase comme un rejoindre . Je trouve que n'existe pas mieux capture exactement ce que vous essayez de trouver - une chambre sans réservation au cours d'une période donnée.


0 commentaires