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

    Logica Booking, query e o ricerca con array

    Salve,
    ho un problema, devo sviluppare un'applicazione che mi permetta di riservare delle "COSE" per un determinato periodo di tempo a seconda della loro disponibilità.
    E' un booking quindi.
    Cioè il cliente dice, posso essere disponibile per volere quella cosa dal 10 agosto alle 20:30 al 12 agosto fino alle 22:00.
    Ugnuna di queste "COSE" avrà una disponibilità.
    Ad esempio:
    COSA A - disponibile dal 1 agosto al 28 agosto tranne il 5, il 6 e il 19
    COSA B - disponibile dal 4 agosto al 15 agosto tranne il 18
    Ecc...ecc....

    Voi come agireste per trovare la prima COSA libera data la disponibilità del cliente?
    Convertite le varie date in timestamp e poi cercate di vedere dove la richiesta del cliente è contenuta?
    Esiste un altro modo con array di date o direttamente in SQL?
    mmmm non vorrei fare la cosa più complicata di quella che è quindi chiedo a voi se avete dei consigli utili da darmi.
    Grazie!

  2. #2
    in realtà la COSA_A sarà disponibile dal 1 al 4 agosto, dal 7 al 18 agosto e dal 20 al 31 agosto... la cosa B sarà disponibile dal 4 al 15 agosto (si dà per scontato che tutte le altre date al di fuori del range siano non disponibili)... fatto questo per trovare le cose disponibili ti basterebbe usare http://dev.mysql.com/doc/refman/5.0/...tor_between... per esempio se vuoi tutte le cose disponibili tra il 6 e il 10 agosto puoi fare in due modi (a seconda di come vuoi i risultati), o confronti che il 6 è compreso negli estremi del periodo e il 10 è compreso negli estremi del periodo (in questo caso ti prenderebbe solo la cosa b), oppure per ogni giorno compreso tra 6 e 10 controlli se in quel giorno c'è una cosa disponibile (e ottieni le due cose)

    detta questa cosa la cosa che più tengo a dirti è che la cosa di usare un array per le cose è una cosa assurda e che non si fa così la cosa. Le cose che ho scritto sopra sono solo un esempio di cosa potresti fare per tornare le cose disponibili, ad esempio per la cosa potresti usare i timestamp e usare i normali operatori piuttosto che il between tra le date della cosa. Insomma pure te devi fare molta analisi su come sviluppare la cosa e come risolvere le cose che dovrai affrontare con la cosa che ti troverai ad utilizzare.cosa. cose. cosi. cos. cosa.
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Originariamente inviato da Santino83_02
    in realtà la COSA_A sarà disponibile dal 1 al 4 agosto, dal 7 al 18 agosto e dal 20 al 31 agosto... la cosa B sarà disponibile dal 4 al 15 agosto (si dà per scontato che tutte le altre date al di fuori del range siano non disponibili)... fatto questo per trovare le cose disponibili ti basterebbe usare http://dev.mysql.com/doc/refman/5.0/...tor_between...
    E' quello che sto studiando al momento

    Originariamente inviato da Santino83_02
    per esempio se vuoi tutte le cose disponibili tra il 6 e il 10 agosto puoi fare in due modi (a seconda di come vuoi i risultati), o confronti che il 6 è compreso negli estremi del periodo e il 10 è compreso negli estremi del periodo (in questo caso ti prenderebbe solo la cosa b), oppure per ogni giorno compreso tra 6 e 10 controlli se in quel giorno c'è una cosa disponibile (e ottieni le due cose)
    Ovviamente devo ottenere il caso B
    Originariamente inviato da Santino83_02
    detta questa cosa la cosa che più tengo a dirti è che la cosa di usare un array per le cose è una cosa assurda e che non si fa così la cosa.
    Infatti non userò un array... rabbrividisco
    Originariamente inviato da Santino83_02
    Le cose che ho scritto sopra sono solo un esempio di cosa potresti fare per tornare le cose disponibili, ad esempio per la cosa potresti usare i timestamp e usare i normali operatori piuttosto che il between tra le date della cosa. Insomma pure te devi fare molta analisi su come sviluppare la cosa e come risolvere le cose che dovrai affrontare con la cosa che ti troverai ad utilizzare.cosa. cose. cosi. cos. cosa.
    Dunque, il problema è anche peggio del previsto perchè la COSA_A che ora chiameremo Stanza A (perchè ci sta come esempio non perchè debba trattare stanze) oltre ad avere una certa disponibilità di giorni, ce l'ha anche di ore.
    Quindi può essere disponibili il giorno 4 dalle 15 alle 18 e il giorno 7 dalle 12 alle 15
    Gli intervalli di tempo NON compresi fra questi che ti ho scritto sopra non dovrebbero uscire in una ipotetica query.
    E il bello è che quella sopra è la tabella delle disponibilità (ogni ora disponibile la salva come record nel DB come timestamp) ma poi quando una camera viene prenotata la query come la cambio?

    Ad esempio:
    ------------------------------------
    --- Stanza_A > disponibilità: giorno 4 dalle 15 alle 18 e il giorno 7 dalle 12 alle 15
    ---> OK la prenoto il giorno 4 dalle 15 alle 16
    --- Stanza_A > nuova disponibilità: giorno 4 dalle 16 alle 18 e il giorno 7 dalle 12 alle 15
    ------------------------------------
    Ovviamente la prenotazione è un'altra tabella che salva (come quella delle disponibilità) le singolte ore prenotate in un record con timestamp

    Ma come incrocio queste due tabelle?
    Secondo te un esempio di query come potrebbe essere?
    Mi viene da usare BETWEEN ma come posso dalla query ESCLUDERE i timestamp delle ore già prenotate?
    mmmm....

  4. #4
    non ho capito come sono le tabelle della disponibilità e della prenotazione
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Ciao!
    RAGIONIAMO
    Dunque, ragionando in maniera barocca come sono solito fare pensavo di fare così. (nomi a caso)
    codice:
    Disponibilità
    | IDdisponibilità | IDStanza | ORA |
    Il campo ORA, tiene i valori in TIMESTAMP delle ore in cui quella Stanza è disponibile per i vari giorni del mese
    Vale a dire, se la stanza è disponibile per 31 giorni al mese, e 24 ore al giorno, nel DB per quella stanza ci saranno 744 valori di ORA in timestamp corrispondenti ad ogni ora del mese.
    codice:
    Richieste
    | IDRichiesta | IDuser | From | To |
    FROM e TO sono due Range in timestamp equivalenti ad esempio a.. dal 10 agosto 2011 ore 10:00 al 12 agosto 2011 ore 11:30 (in timestamp quindi)
    codice:
    Prenotazioni
    | IDPrenotazione | IDuser | IDStanza | From | To |
    In questa tabella vengono salvati i dati di CHI prenota (IDuser) e quando FROM > TO
    Avrei potuto salvare il riferimento all'indice IDdisponibilità.
    Mi sarei semplificato la vita perchè le ore che presentavano un collegamento Disponibilità.IDdisponibilità = Prenotazioni.IDdisponibilità non sarebbero più utilizzabili.
    MA, il problema è che una stanza disponibile dalle 10:00 alle 11:00 può essere prenotata anche per 15 minuti.
    Quindi dalle 10:00 alle 11:00 può essere prenotata 4 volte a 4 diversi utenti.
    Oddio... potrei mantenere questo meccanismo (Disponibilità.IDdisponibilità = Prenotazioni.IDdisponibilità) andando a salvare nella tabella Disponibilità non le singole ORE ma addirittura i QUARTI D'ORA in cui è disponibile... MMMMMMMMMmmmmmmmmmmmmmmm......

    NOTA: la prenotazione non deve essere automatica.
    Voglio fare in modo che date N Richieste, possa vedere quante stanze sono disponibili nel range FROM > TO
    Una volta scelto quale stanza rendere prenotata, salvo nella tabella Prenotazioni il range FROM > TO - OPPURE l'associazione Disponibilità.IDdisponibilità = Prenotazioni.IDdisponibilità

    MMMMMMMMMmmmmmmmmmmmmmmm......

    Faccio prove.

  6. #6
    se puoi prenotare per frazioni inferiori all'ora, allora anche la disponibilità deve essere divisa per le frazioni... per dirti: c'è una frazione minima che si può prenotare, o in un'ora posso prenotare 1 minuto come 59 ?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #7
    No le frazioni sono di 15 minuti.
    Quindi la prenotazione minima è di 15 minuti con tutti i suoi multipli.

  8. #8
    Originariamente inviato da PazZII
    No le frazioni sono di 15 minuti.
    Quindi la prenotazione minima è di 15 minuti con tutti i suoi multipli.
    e allora la disponibilità dividila per 15 minuti e non per ora... di che ordine di misura parliamo per le cose da prenotare? decine? centinaia? migliaia?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  9. #9
    Perfetto fraziono la disponibilità per 15 minuti.
    L'ordine di grandezza... mm... migliaia.
    Nel senso... avendo a disposizione 10 stanze (ma che potrebbero diventare anche 100) ognuna è prenotabile per 15 minuti al giorno in diciamo 8 ore lavorative.

    (60/15)*8*10 = 320 prenotazioni giornaliere massime con 10 stanze.

  10. #10
    Originariamente inviato da PazZII
    Perfetto fraziono la disponibilità per 15 minuti.
    L'ordine di grandezza... mm... migliaia.
    Nel senso... avendo a disposizione 10 stanze (ma che potrebbero diventare anche 100) ognuna è prenotabile per 15 minuti al giorno in diciamo 8 ore lavorative.

    (60/15)*8*10 = 320 prenotazioni giornaliere massime con 10 stanze.
    diciamo 100 stanze prenotabili 365 gg/anno 24/h a frazioni di 15 minuti parliamo di 3 milioni e mezzo di record, quindi attento alle query e all'uso di indici....
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

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