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

    Campo time compreso tra 2 parametri.

    Ciao a tutti, e grazie a chi volesse darmi una mano.

    Ho una tbl mysql che ospita gli orari in formato time, di prenotazione inseriti:

    id | inizio | fine |

    1 | 10:00:00 12:00:00
    2 | 12:00:00 16:00:00
    3 | 16:00:00 20:00:00

    L'utente inserisce il nuovo orario di prenotazione, sempre in formato time, ed ecco che sto per inserire i nuovi dati in tabella:

    inizio(09:00:00)
    fine ( 18:00:00)

    Ma devo prima controllare se l'utente ha inserito una prenotazione che non può essere valida, in quanto sovrasta altre prenotazioni.

    $inizio e $fine sono le variabili che contengono i valori passati dalla form via GHET.

    Ho provato con:

    "SELECT * FROM prenotazioni WHERE inizio < '$inizio' AND fine > '$fine' ";

    ma non ne vengo proprio a capo.. qualche dritta ?
    grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    ragionando per logica
    mi verrebbe da dirti che le condizioni siano abbastanza complesse
    come base di partenza ti direi questo
    prendi l'orario di inizio

    per essere valido non deve trovarsi all'interno di un intervallo di valori tra i campi inizio e fine

    in sostanza
    inizio<=$inizio<=fine
    per mysql sarebbe
    (inizio <= '$inizio' AND fine >='$inizio)

    lo stesso vale per l'orario di fine
    inizio<=$fine<=fine
    per mysql sarebbe
    (inizio <= '$fine' AND fine >='$fine')

    c'è un problema però
    mettiamo il caso che entrambi gli orari sono disponibili
    inizio= 10.00
    fine 16.00
    magari in mezzo c'è qualcosa di prenotato
    e questo non dovrebbe andare bene...quindi bisogna escludere questa possibilità
    cioè devo andare bene orari che uniti insieme formino intervalli non sovrapponibili.
    questa possibilità sarebbe cosi tradotta
    (inizio >= '$inizio' AND fine <='$fine')
    quindi
    (inizio <= '$inizio' AND fine >='$inizio') vuol dire che $inizio non si deve trovare in nessun intervallo gia preso
    (inizio <= '$fine' AND fine >='$fine') vuol dire che $fine non si deve trovare in nessun intervallo gia preso
    e
    (inizio >= '$inizio' AND fine <='$fine') vuol dire che $inizio e $fine non si devono trovare esterni all'intervallo
    quindi in definitiva
    select * from tabella where (inizio <= '$inizio' AND fine >='$inizio') OR (inizio <= '$fine' AND fine >='$fine') OR (inizio >= '$inizio' AND fine <='$fine')
    se trova risultati vuol dire che $inizio o $fine o entrambi non vanno bene..spero di aver interpetrato bene

  3. #3
    Prova così:

    Codice PHP:
    // Variabili contenenti gli orari di inizio e fine da inserire nel DB
    $inizio "hh:mm:ss"
    $fine "hh:mm:ss";
    $query "SELECT * FROM orari WHERE NOT ('$fine' <= inizio OR '$inizio' >= fine)";
    $result mysql_query($query) or die ("Errore: ".mysql_error());
    $rows mysql_num_rows($result);
    if (
    $rows == 0) {
        
    // INSERT orari nel DB

    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    ciao satifal
    mi spieghi il tuo ragionamento per curiosità?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    corregimi se sbaglio in questo modo tu dici
    prendo i valori esterni all'intervallo gia prenotato
    lo nego quindi sono valori interni..
    cioè l'intervallo prenotato...
    di conseguenza se non ho risultati significa che posso inserire i dati?
    in questo modo si considera il fatto che l'utente può inserire orari in teoria buoni ma che sono esterni a un intervallo?
    esempio
    orari utente 9 e 12
    intervallo prenotato 10 11
    quindi non possono essere accettati.

  6. #6
    Ho adottato il sistema di Satifal, semplice e funzionante.
    Come sempre bastava rifletterci un po' di più no ?

    Grazie comunque a tutti.

    Alex-

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.