Schematisation de mon programme php

TheoLeao
Invité n'ayant pas de compte PHPfrance

03 mai 2019, 09:52

Bonjour, j'espère que vous allez bien.
Je rencontre des difficultés à mettre en place un système de réservation (avec demande et acceptation).

Mise en contexte: Je souhaite réalisé un système de réservation (d'engins), possibilité de réserver pour plusieurs jours.

Formulaire de réservation: Nom, Type, Date de début, Date de fin

Table engin: id_engin, nom_engin, type_engin
Table reservation_engin: id_reservation, id_engin, dateDebut, dateFin

J'ai donc décidé dans la table engin, de créer une ligne par engin, pour ne pas à avoir à gérer de stock. Parce que le stock peut être différent d'un jour à un autre pour le même engin.
Je sais que ma configuration est fausse, mais je n'arrive pas à imaginer la liaison entre les dates et les stocks afin de définir si durant ce créneau un engin est disponible ou non.
Quelqu'un pourrez me mettre sur la piste?

Je travaille avec du php/sql.

J'espère que j'ai été suffisamment clair ^^

Merci beaucoup de m'avoir lu

Mammouth du PHP | 1967 Messages

03 mai 2019, 10:35

Pour t'assure qu'une nouvelle reservation n'ai pas de conflits avec les autres, il faut que les dates de débu/fin de la nouvelle reservation ne soit pas inclu entre les dates de chaque réservation ET que les dates de début/fin de chaque reservation ne soit pas compris entre les dates de la nouvelle reservation.

en cas de tables assez grandes, tu peux réduire le nombre de comparaison en excluant les réservation avec date de débuts > date de fin de la nouvelle réservation et l'inverse est aussi vrai.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

TheoLeao
Invité n'ayant pas de compte PHPfrance

03 mai 2019, 11:12

Merci de ta réponse,
Imaginons cette nouvelle disposition:

Table engins:id_engin, nom,type,dateEntree,dateSortie
Table type: id_type, nom_type
Table reservation_engins: id_resa,id_engin, dateDebut, dateFin

avec:
- engins[type] C type[id_type]
- reservations_engin[id_engin] C engins[id_engin]

où dateEntree correpond à l'entrée de l'engin dans l'établissement (soit par ajout manuel, soit par retour de prêt validé par l'admin)
où dateSortie correspond à la sortie de l'engin de l'établissement définit lorsqu'il est prêté

Donc ma condition pour vérifier la disponibilité serait:
Afficher la ligne SI
- dans ENGINS, type = type voulu
ET
- dateEntree < dateDebut ET dateSortie < dateDebut (1er cas: déjà réservé, mais revenu à tant)
OU - dateEntree < dateDebut ET dateSortie est null (2nd cas: nouvel engin disponible mais jamais prêté)
OU - dateEntree < dateDebut ET dateSortie>dateFin (3e cas: engin disponible, déjà réservé mais pour aprés la date de fin)

ça me semble correct, qu'en pense-tu?
Mais concernant la vérification de stock, étant donné que je n'ai pas de variable stock, mais juste une ligne par engin.
Comment puis-je faire, par exemple si il y a que 3 engins disponible et qu'il en veux quatre.
Il y aura donc que 4 lignes qui correspond à ces critères dans ma table engins.
Comment gérer cet erreur et lui dire que pour cet intervalle, il n'y a que 3?

A vrai dire, je suis novice en SQL..

Merci beaucoup

Mammouth du PHP | 1967 Messages

03 mai 2019, 11:45

tout d'abords, ta modification ne tiens pas dès qu'il y a plus d'une réservation en cours. ma solution le prenais en compte

J'avais pas compris ton problème de stock, je voyais les engins comme une entité unique et si tu as 2 engins identiques, il aurait 2 id différent. est-ce envisageable ?
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube