Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Non ce la faccio piu: RICERCA CON DATE/PERIODO LIBERO O OCCUPATO

    Salve a tutti,

    impazzisco!!!!!!! allora cerco di spiegarmi: io ho un database con una tabella indisponibilita fatta così:
    codice:
    id-camera | dataFrom | dataTo
    dove per ogni camera viene settata la data di inizio e fine indisponibilità.

    ora sto cercando di costruire il motore di ricerca, ma non riesco a trovare in maniera corretta le camere libere. Questa è la parte della query incriminata:
    codice:
    'esiste disponibilita per il periodo selezionato
    sql=sql & " and not exists("
    
    sql=sql & "select * from indisponibilita d where"
    
    'intervallo date: from
    sql=sql & " ((d.dataFrom between #" & ToItalian(dataIn) &"# and #" & ToItalian(dataOut) &"#)"
    
    'intervallo date: to
    sql=sql & " or (d.dataTo between #" & ToItalian(dataIn) &"# and #" & ToItalian(dataOut) &"#)"
    
    
    'intervallo date: from 2
    sql=sql & " or (d.dataFrom<=#" & ToItalian(dataIn) & "# and d.dataTo>=#" & ToItalian(dataIn) &"#)"
    
    'intervallo date: to 2
    sql=sql & " or (d.dataFrom<=#" & ToItalian(dataIn) & "# and d.dataTo>=#" & ToItalian(dataIn) & "#))"
    
    'join
    sql=sql & " and d.[id-camera]=cam.id)"
    in sostanza avevo pensato al NOT EXISTS, quindi trovo se la camera che il database sta processando ha un periodo di indisponibilita in cui le mie date usate per la ricerca di INGRESSO e USCITA sono presenti.

    solo che questo che ho scritto non funziona e non mi visualizza le camere libere, oppure mi visualizza le camere occupate per quel periodo!!!!

    aiuto vi supplico qualcuno che mi possa aiutare

    grazie

  2. #2
    le date sono in formato....?

  3. #3
    le date sono in formato gg/mm/aaaa

  4. #4
    gg/mm/aaaa non e' un formato. data, numero, testo...

  5. #5
    scusa

    SONO IN FORMATO data su database access. Tipo di data gg/mm/aaaa

  6. #6
    in sostanza nel database io memorizzo PERIODI DI INDISPONIBILITA con due campi data. Voorei che passando poi alla query due valori, chedck-in e check-out, ovvero un PERIODO, mi trovasse tutte quelle camere il cui periodo di indisponibilità NON SI INTERSECA con quello di ricerca, quindi risultino LIBERE

    ho trovato una soluzione casomai nessuno riuscisse ad aiutarmi con i periodi:

    invece di memorizzare i periodi di indisponibilità memorizzo solo i giorni, quindi se il periodo è dal 15/5/2005 al 20/5/2005 io andrò a memorizzare
    15/5/2005
    16/5/2005
    17/5/2005
    ...
    20/5/2005

    e poi la query si modifica in:

    where (d.data=#dataIn# or d.data=#dataOut# or d.data=#dataOut# or d.data=#dataout#)...

    solo che così facendo io avrei per la stessa camera un sacco di righe di giorni, che speravo di non avere in questo modo. giusto per avere il minor numero di record nel database. Però se non riesco a risolvere quella query all'inizio, mi sa che mi toccherà fare così

    spero sempre in un aiuto e spero di essere stato chiaro

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    16
    per quanto riguarda la prima soluzione potresti fare così:
    va bene la tabella delle "prenotazioni" con data inizio e fine, poi immagino che tu abbia un'altra tabella "camere" nel db , quindi dovresti estrarre tutte le camere dalla tb "camere" che nel periodo prescelto non sono presenti all'interno della tabella "prenotazioni".


    SELECT * FROM Camere WHERE (((Camere.Codice) Not In (select Codice FROM Prenotazioni WHERE Prenotazioni.Data_i between #"&data_i&"# and #"&data_f&"# OR Prenotazioni.Data_f between #"&data_i&"# and #"&data_f&"# )))

    data_i
    data_f
    sono i paramentri che passi alla query

    i nomi dei campi delle tabelle li devi adattare ai tuoi

  8. #8
    se tu leggi la prima che ho passato ce l'ha il between come dici te, il problema è questo.

    se io ho come data di indisponibilita dal 9/05/2005 al 21/05/2005 e come ricerca metto il periodo dal 10/05/2005 al 20/05/2005 me la trova lo stesso perchè giustamente le due date di prenotazione non sono comprese come estremi nella mia ricerca...

    un casino

  9. #9
    nella prima query vedo un ToItalian(..
    quindi interroghi con gg/mm/aaaa? le date vanno *sempre* interrogate come mm/gg/aaaa.

  10. #10
    allora,

    diciamo che ho risolto

    o meglio ho raggirato il problema:

    prima avevo Periodi di date da confrontare, adesso ho fatto in modo da salvare giorno per giorno l'indisponibilità della camera in maniera da non dovere confrontare due periodi ma due date singole, quindi + facile.

    solo che prima con i periodi nel database avevo una riga a periodo, adesso invece o N-righe con N=numero dei giorni del periodo. Però altro modo non ho trovato. spero che il database non vada in palla per questo


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 © 2026 vBulletin Solutions, Inc. All rights reserved.