• Home
  • Forum
  • Hosting, Server e Sistemi
  • Database
  • MySQL

[MySQL] Verifica disponibilità camera

  • Creatore Discussione Creatore Discussione lorenzo84
  • Data di inizio Data di inizio 5 Ott 2014
Prec.
  • 1
  • 2
Primo Prec. 2 di 2

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 9 Ott 2014
  • #21
nel mio db le date sono rovesciate,
prova in questo modo
ciao
Marino
Codice:
SELECT * from stanze 
WHERE NOT EXISTS
(
SELECT stanza_id 
FROM prenotazioni
WHERE
(
( datain >= $datain AND datain <= $dataout ) 
OR
( dataout >= $datain AND dataout <= $dataout ) 
)
AND stanza_id=stanze.stanza_id
)
 
L

lorenzo84

Utente Attivo
22 Lug 2012
239
0
16
  • 9 Ott 2014
  • #22
Adesso sembra funzionare ma rimane il problema che se ho tutte le stanze occupate dal 10/10/2014 al 12/10/2014 e volessi prenotare dal 08/10/2014 al 15/10/2014 lui mi da tutte le stanze libere quando in realtà dal 10 al 12 sono tutte occupate...
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 9 Ott 2014
  • #23
di seguito vedi la query che ho utilizzato e le immagini del risultato,
la 1a query estrae solo le camere occupate, la 2a estrae le camere libere
nel periodo da te indicato, sembra funzionare ....
ciao
Marino
Codice:
declare @idhotel  as int;
declare @room     as int;
declare @date_in  as datetime;
declare @date_out as datetime;

set @idhotel  = 1;
set @date_in  = '2014/10/08';
set @date_out = '2014/10/15';


SELECT * 
FROM roomreservations
WHERE
(
( date_in >= @date_in AND date_in <= @date_out ) 
OR
( date_out >= @date_in AND date_out <= @date_out ) 
)

SELECT * from rooms 
WHERE NOT EXISTS
(
SELECT room 
FROM roomreservations
WHERE
(
( date_in >= @date_in AND date_in <= @date_out ) 
OR
( date_out >= @date_in AND date_out <= @date_out ) 
)
AND room=rooms.room
)
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 9 Ott 2014
  • #24
c'è un unico caso che non viene controllato e che non dovrebbe essere permesso,
il caso è dato dalle date di ingresso e uscita uguali, se vuoi controllare anche questa situazione puoi modificare così,
Codice:
SELECT * from rooms 
WHERE NOT EXISTS
(
SELECT room 
FROM roomreservations
WHERE
(
( date_in >= @date_in AND date_in <= @date_out ) 
OR
( date_out >= @date_in AND date_out <= @date_out ) 
OR
( @date_in >= date_in AND @date_in <= date_out ) 
)
AND room=rooms.room
)
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 9 Ott 2014
  • #25
nello zip allegato con i diversi screenshots, trovi il risultato di 10 casi, ho fatto scorrere le date di ingresso-uscita
ed in ciascuno screen,
nel primo blocco trovi le date di ingresso e di uscita usate per il test,
nel secondo blocco trovi le camere prenotate
nel terzo blocco trovi le camere libere
la query usata è l'ultima che ho postato
a me sembra che il risultato sia ok, fai sapere, ciao
Marino
Vedi l'allegato HotelReservationTests.zip
 
Ultima modifica: 9 Ott 2014
L

lorenzo84

Utente Attivo
22 Lug 2012
239
0
16
  • 9 Ott 2014
  • #26
Domani mattina ci riprovo... ma come ti ho scritto funziona perfettamente ma nel caso avessi
tutte le stanze occupate dal 10/10/2014 al 12/10/2014 e volessi prenotare dal 08/10/2014 al 15/10/2014 lui mi da tutte le stanze libere quando in realtà dal 10 al 12 sono tutte occupate... e non capisco perchè...
 
L

lorenzo84

Utente Attivo
22 Lug 2012
239
0
16
  • 13 Ott 2014
  • #27
Buongiorno!!! Adesso funziona perfettamente tranne che se provo a prenota in concomitanza di un checkout... Cioè se ho una camera occupata dal 13 al 14/10/2014 e volessi prenotare una camera dal 14 al 15/10/2014 mi restituisce solo le camere completamente libere lasciando fuori quella con il checkout quando in realtà sarebbe libera. Mentre la stessa cosa sul checkin funziona bene...
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 13 Ott 2014
  • #28
ho tolto due "=", ho ricontrollato i 10 esempi e mi sembra funzionare bene
prova ... ciao
Marino
Codice:
SELECT * from rooms 
WHERE NOT EXISTS
(
SELECT room 
FROM roomreservations
WHERE
(
( date_in >= @date_in AND date_in <= @date_out ) 
OR
( date_out > @date_in AND date_out <= @date_out ) 
OR
( @date_in >= date_in AND @date_in < date_out ) 
)
AND room=rooms.room
)
scusa se non ho cambiato i nomi
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 15 Ott 2014
  • #29
mi ha lasciato un dubbio la tua affermazione, che la data di ingresso funzionava,
da cui ho ritoccato solo l'uscita
ma ho fatto l'esempio con excel che allego come pdf,
se concordi che si lascia la camera al mattino e la si occupa il pomeriggio,
quindi l'esempio rispetta le tue aspettative, ebbene la query e quella sotto indicata
non viene contemplato il caso di ingresso/uscita nello stesso giorno
ciao
Marino

Codice:
SELECT * from stanze 
WHERE NOT EXISTS
(
SELECT distinct stanzaID 
FROM prenotazioni
WHERE
(
( datain >= @datain AND datain < @dataout ) 
OR
( dataout > @datain AND dataout <= @dataout ) 
)
AND stanzaID=stanze.stanzaID
)

Vedi l'allegato DispoCamere.pdf
 
L

lorenzo84

Utente Attivo
22 Lug 2012
239
0
16
  • 16 Ott 2014
  • #30
Ciao!!! Grazie mille per le risposte.
Adesso sembra funzionare tutto bene... Ecco la query definitiva:

PHP:
SELECT * from stanze 
WHERE NOT EXISTS
(
SELECT stanza_id
FROM prenotazioni
WHERE
(
( datain >= $datain AND datain < $dataout ) 
OR
( dataout > $datain AND dataout <= $dataout ) 

)
AND stanza_id=stanze.id_stanza
)
 
D

deejayp

Nuovo Utente
28 Gen 2019
1
0
1
  • 28 Gen 2019
  • #31
scusate ragazzi,
sto realizzando un semplice pms e sto cercando di trovare la query corretta per l'inserimento di una prenotazione, controllando che la camera selezionata non sia ancora prenotata in un determinato periodo.

La soluzione che avete indicato indica le camere disponibili in un periodo prefissato.

Ma ho notato che se segnala questa opzione:

Prenotazione A:
Arrivo 30/01/2019
Partenza 02/02/2019

se provo ad inserire una prenotazione inserendo questa data:
Arrivo: 31/01/2019
Partenza: 01/02/2019

Mi da la camera libera, non leggendo la Prenotazione A con le date indicate precedentemente.

A voi non risulta?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
  • 28 Gen 2019
  • #32
ciao
non so dirti esattamente in quanto non ho più seguito il problema, se noti l'ultima risposta risale al'ottobre 2014.
quindi non so se anno risolto.
comunque il ragionamento da fare (scrivo in pseudo codice)
ipotizziamo che la camerea sia occupata (o prenotata ) dal $DA al $DB
ti arriva una richiesta dal $d_in al $d_out
Codice:
//la camere è occupata da $DA a $DB
//arriva richiesta prenotazione
//da $d_in a $d_out
//prima verifica
if($d_in > $d_out){
    //evidente che questa verifica è essenziale
    //ERRORE -> ESCI   
}else{
    //verifichi la data di uscita richiest
    if($d_out < $DA){
        //puoi prenotare
        //la richiesta è tutta antecedente all'occupazione
    }else{
        if($d_in > $DB){
            //puoi prenotare
            //la richiesta è tutta successiva all'occupazione
        }else{
            //NON PUOI PRENOTARE, cambia camera
            //euna delle due date richieste interseca l'occupazione
        }   
    }     
}
una cosa a cui devi stare molto attento a quando si usano le date soprattutto per le verifiche a come le date sono formattate
esempio
01-12-2019 può risulare minore di 15-10-2018
a mio parere il metodo migliore è uasare il formato AAAA-mm-gg per i calcoli e poi visualizzaro correttamente in italiano
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 29 Gen 2019
  • #33
per verificare la disponibilità in un periodo
inserisci nella clausola where il codice,
Codice:
…..
AND NOT (@data_partenza < pr_arrivo OR pr_partenza < @data_arrivo)
dove le date con la chiocciola sono le data da verificare
le date "pr_...." sono le date già prenotate presenti nel db

le date devono essere nel formato "YYYY-mm-dd"

la clausola ti restituisce le camere prenotate
​
se non é sufficiente fatti vivo

( ps, merito di @Oldfan )
 
Ultima modifica: 29 Gen 2019
Prec.
  • 1
  • 2
Primo Prec. 2 di 2
Devi accedere o registrarti per poter rispondere.

Discussioni simili

Ciclo di verifica multipla su campo DB mysql
  • dynamicdevotion
  • 14 Ott 2011
  • PHP
Risposte
4
Visite
3K
PHP 15 Ott 2011
dynamicdevotion
M
Personalizzare Mysql su una macchina VPS in Aruba
  • morenog
  • 14 Gen 2025
  • Server Dedicati e VPS
Risposte
0
Visite
1K
Server Dedicati e VPS 14 Gen 2025
morenog
M
S
Utilizzare MySql con maschere Access
  • staiul
  • 27 Nov 2024
  • MySQL
Risposte
0
Visite
556
MySQL 27 Nov 2024
staiul
S
K
form Inserimento record mysql
  • Kiko74b
  • 21 Gen 2023
  • PHP
Risposte
2
Visite
1K
PHP 25 Gen 2023
WmbertSea
P
Mysql lento a cancellare
  • paolo.ladoni
  • 18 Nov 2022
  • MySQL
Risposte
1
Visite
1K
MySQL 22 Nov 2022
marino51
P
Codifica caratteri speciali mysql php
  • Peterrey76
  • 24 Ott 2022
  • PHP
Risposte
2
Visite
3K
PHP 23 Apr 2025
webest
N
MAX() + ADD_DATE - per update su Mysql
  • Namaste!
  • 20 Lug 2022
  • MySQL
Risposte
0
Visite
2K
MySQL 20 Lug 2022
Namaste!
N
F
Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili
  • Fra_23
  • 25 Giu 2022
  • PHP
  • 2
Risposte
20
Visite
4K
PHP 16 Lug 2022
zorro
L
tipo boolean non funzionante su mariadb (mysql). E codice php 7.4.
  • luigi777
  • 18 Giu 2022
  • PHP
Risposte
0
Visite
918
PHP 18 Giu 2022
luigi777
L
M
PHP/MySQL - Estrarre valori min e max di ogni gruppo
  • Max61
  • 10 Giu 2022
  • PHP
Risposte
5
Visite
2K
PHP 13 Giu 2022
Max61
M
W
MySQL ciclo in SELECT
  • wolfland
  • 26 Mag 2022
  • MySQL
Risposte
0
Visite
3K
MySQL 26 Mag 2022
wolfland
W
L
Mysql gestionale multipiattaforma
  • lucavalentino
  • 7 Apr 2022
  • MySQL
Risposte
0
Visite
2K
MySQL 7 Apr 2022
lucavalentino
L
W
MySQL SELECT list dinamica
  • wolfland
  • 2 Feb 2022
  • MySQL
Risposte
0
Visite
2K
MySQL 2 Feb 2022
wolfland
W
M
utilizzo mysql in nodejs - crea createdAt e updateAt
  • misonsan
  • 31 Dic 2021
  • MySQL
Risposte
1
Visite
3K
MySQL 31 Dic 2021
misonsan
M
T
colonne di tabelle mysql ordinate
  • twogate
  • 28 Nov 2021
  • MySQL
Risposte
0
Visite
2K
MySQL 28 Nov 2021
twogate
T
M
Sintassi "personalizzata" per mysql workbench?
  • mattiac
  • 27 Set 2021
  • MySQL
Risposte
0
Visite
3K
MySQL 27 Set 2021
mattiac
M
A
Mysql
  • andreainter
  • 26 Ago 2021
  • MySQL
Risposte
0
Visite
1K
MySQL 26 Ago 2021
andreainter
A
F
Ricreare struttura php+mysql su Xampp
  • francescoITA
  • 23 Ago 2021
  • Apache
Risposte
0
Visite
6K
Apache 23 Ago 2021
francescoITA
F
M
Array associativi php su 2 campi mysql
  • maxnegri2036
  • 14 Ago 2021
  • PHP
Risposte
10
Visite
2K
PHP 16 Ago 2021
zorro
Z
Controllo giorni MYSQL
  • z.cristiano
  • 28 Giu 2021
  • PHP
Risposte
0
Visite
1K
PHP 28 Giu 2021
z.cristiano
Z
Condividi:
Facebook X (Twitter) LinkedIn WhatsApp e-mail Condividi Link
  • Home
  • Forum
  • Hosting, Server e Sistemi
  • Database
  • MySQL
  • Italiano
  • Termini e condizioni d'uso del sito
  • Policy Privacy
  • Aiuto
  • Home
Community platform by XenForo® © 2010-2024 XenForo Ltd. | Traduzione a cura di XenForo Italia
Menu
Accedi

Registrati

  • Home
  • Forum
    • Nuovi Messaggi
    • Cerca...
  • Novità
    • Featured content
    • Nuovi Messaggi
    • Ultime Attività
X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?

X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?