Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Confronto tra date per ottenere giorni intermedi

    Ciao a tutti, sto creando una sorta di booking, ho un form che passa due date (arrivo e partenza) e quindi devo verificare nel database delle prenotazioni se le date sono libere.

    Per prima cosa devo fare un ciclo ricavando ogni singolo giorno per costruire la query... qualcuno conosce una funzione per mettere a confronto due date ed estrapolare i singoli giorni?
    Grazie
    "Link2me.it: Professional network e Marketplace"
    www.link2me.it

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    esiste l'operatore between

    codice:
    SELECT column_name(s)
    FROM table_name
    WHERE column_name
    BETWEEN value1 AND value2

  3. #3
    Originariamente inviato da bstefano79
    esiste l'operatore between

    codice:
    SELECT column_name(s)
    FROM table_name
    WHERE column_name
    BETWEEN value1 AND value2
    Ciao,e grazie per l'aiuto ma forse mi sono spiegato male... a me serve la parte prima, cioè quella in php (non sql).
    Ho 3 tabelle fatte così:

    "prenotazioni"
    id
    data_arrivo
    data_partenza
    etc. (i campi del cliente)

    "stanze"
    id
    nome

    "prenotazioni_stanze"
    id_stanza
    id_prenotazione

    A me serve di ricavare le stanze che sono libere dal giorno x al giorno y.
    Forse non ho ben capito il tuo metodo, in questo caso ti chiederei di farmi un esempio con un intervallo di date (basato sul mio db)
    Grazie in anticipo
    "Link2me.it: Professional network e Marketplace"
    www.link2me.it

  4. #4
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    codice:
    SELECT nome FROM stanze WHERE stanze.id NOT IN 
    (SELECT id_stanza FROM prenotazioni,prenotazioni_stanze 
    WHERE id_prenotazione=prenotazioni.id AND 
    ((NuovaDataArrivo BETWEEN data_arrivo AND data_partenza) 
    OR (NuovaDataPartenza BETWEEN data_arrivo AND data_partenza ) ) )
    prova così e fammi sapere

  5. #5
    Ciao, grazie per la disponibilità.

    Mi da questo errore:

    Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in...

    ho provato anche a modificarla così:

    SELECT * FROM stanze WHERE stanze.id NOT IN (SELECT prenotazioni_stanze.id_stanza FROM prenotazioni_stanze INNER JOIN prenotazioni ON prenotazioni_stanze.id_prenotazione = prenotazioni.id WHERE (('2010/10/07' BETWEEN prenotazioni.arrivo AND prenotazioni.partenza) OR ('2010/10/22' BETWEEN prenotazioni.arrivo AND prenotazioni.partenza )) )

    ma ottengo lo stesso errore... :-(
    "Link2me.it: Professional network e Marketplace"
    www.link2me.it

  6. #6
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    non sono molto esperto di sql, diciamo che non ci capisco quasi na mazza e che ci ho provato , prova a postare la tua richiesta nella sezione sql

  7. #7
    il tuo post mi è piaciuto un sacco, per il momento ho fatto uno schema che credo possa essere utile a spiegare un po' meglio, con dei record di esempio, il tuo caso, poi proverò a fare una query di ricerca "stanza libera"

    codice:
    "prenotazioni"
    id
    data_arrivo
    data_partenza
    nomecliente
    -- etc. (i campi del cliente)
    
    "stanze"
    id
    nome
    
    "prenotazioni_stanze"
    id_stanza
    id_prenotazione
    
    
    [ proviamo ad inserire un po' di record come esempio ]
    
    --- prenotazioni ---
    ID  ARRIVO		PARTENZA	NOMECLIENTE
    1	01/10/2010	05/10/2010	pippo
    2	03/10/2010	04/10/2010	pluto
    3	12/10/2010	13/10/2010	paperino
    4	07/10/2010	08/10/2010	topolino
    5	01/10/2010	10/10/2010	paperina
    6	05/10/2010	06/10/2010	minnie
    
    --- stanze ---
    ID	NOME
    1	bianca
    2	blu
    3	verde
    
    --- prenotazioni_stanze ---
    ID	ID_STANZA	ID_PRENOTAZIONE
    1	1		1
    2	3		2
    3	1		3
    4	1		4
    5	2		5
    6	3		6
    
    
    [ elenco giorni, _ per vuoto oppure il numero della prenotazione (id_prenotazione) ]
    	gg:	1	2	3	4	5	6	7	8	9	10	11	12	13
     1. bianca	1	1	1	1	1	_	4	4	_	_	_	3	3
     2. blu	5	5	5	5	5	5	5	5	5	5	_	_	_
     3. verde	_	_	2	2	6	6	_	_	_	_	_	_	_
    ok a questo punto se il sig Bruto volesse prenotare, per esempio, per 3 gg dal 9 all' 11, la query dovrebbe estrarre le stanze 1 e 3 ma NON la 2 .... vedremo

  8. #8
    Originariamente inviato da bstefano79
    non sono molto esperto di sql, diciamo che non ci capisco quasi na mazza e che ci ho provato , prova a postare la tua richiesta nella sezione sql
    In realtà la tua query funzionerebbe, ma con l'ultima versione di MySql, evidentemente sul mio server (aruba) c'è quella precedente.
    Per info: http://database.html.it/articoli/leg...uovo-database/ (capitolo subquery)
    "Link2me.it: Professional network e Marketplace"
    www.link2me.it

  9. #9
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    Originariamente inviato da centoiso
    In realtà la tua query funzionerebbe, ma con l'ultima versione di MySql, evidentemente sul mio server (aruba) c'è quella precedente.
    Per info: http://database.html.it/articoli/leg...uovo-database/ (capitolo subquery)
    allora sono quasi stupito di me stesso

  10. #10
    Originariamente inviato da bstefano79
    allora sono quasi stupito di me stesso
    Caro bstefano79, mi sei stato di grandissimo aiuto e ce l'ho fatta!
    Il problema non era la versione di myslq (ho installata la 5 e passa) mancava semplicemente la connessione!!!
    La query finale però l'ho dovuta minimamente modificare così:

    " SELECT * FROM stanze WHERE stanze.stato = 1 AND stanze.id NOT (SELECT prenotazioni_stanze.id_stanza FROM prenotazioni_stanze INNER JOIN prenotazioni ON prenotazioni_stanze.id_prenotazione = prenotazioni.id WHERE ((prenotazioni.arrivo BETWEEN '$inizio' AND '$fine') OR (prenotazioni.partenza BETWEEN '$inizio' AND '$fine' )) ) ";

    Grazie ancora
    "Link2me.it: Professional network e Marketplace"
    www.link2me.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.