Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117

    [VB.NET - MySQL] - Controllare che 2 intervalli data non si accavvallino

    Ciao a tutti! Io ho un dataBase MySQL che ha una tabella chiamata Periodi dove ho 3 campi:

    .idPeriodo --- Int(11) --- Auntoincrement
    .dataStartPeriodo --- (DATE)
    .dataStopPeriodo --- (DATE)

    come avrete capito serve a immagazzinare intervalli di date che partono dalla data contenuta in dataStartPeriodo sino a quella contenuta in dataStopPeriodo (comprese)

    Ora volevo sapere c'è un modo pratico durante l'inserimento di un nuovo periodo (o la modifica di uno esistente) per verificare che le nuove date non creino un periodo che si accavalli con quelli già esistenti!

    Esempio:

    Se nel database ho già il periodo che va dal: 17/11/2011 al 30/11/2011

    E provo a inserire un nuovo periodo (o a modificarne uno esistente) inserendo le date:

    Start: 20/11/2011
    Stop: 04/12/2011

    Dovrebbe accorgersi che dal 20/11 al 30/11 i giorni son già gestiti nel periodo che ho già in database!

    Spero di esser stata chiara non riesco a spiegarmi!
    Grazia tutti

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    759
    Due periodi si accavallano se l'inizio del secondo periodo, o la sua fine, o entrambi, cadono nel primo periodo.
    Basandoti su questa regola puoi scrivere una query.

  4. #4
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    Grumpy: Sin li ci arrivo!

    Gibra: non ho impostato nulla...mi si blocca il neurone quando provo a ideare le condizioni WHERE della query... (io per sto tipo di controlli di solito lancio una query SELECT e se ottengo zero record in risposta so che non esiste ciò che non devo duplicare!)

    Il problema è che io non devo confrontare 2 periodi tra di loro per vedere se si accavallano (es il nuovo periodo che sto inserendo e uno da me scelto)...ma tutti i periodi nel database con quello nuovo!

  5. #5
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    io avevo pensato a una cosa del genere:

    "SELECT * FROM periodi WHERE dataFinePeriodo>dataInizioNUOVO OR dataInizioPeriodo<dataFineNUOVO"

    Francamente però non so sia corretta....

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Devi riflettere con calma...

    Francamente la tua risposta a Grumpy mi ha un po' stupito.
    Hai risposto che fino a lì ci arrivi... ma non hai provato a buttar giù alcuna query....

    Per cui, ci arrivi o no?

    Hai provato a descrivere su un foglio di carta la situazione?
    Fai un disegno, indicando prima la linea temporale dell'intervallo di riferimento,
    poi, sotto, disegna le varie possibilità per cui un'altro intervallo potrebbe 'ipoteticamente' sovrapporsi al primo.

    Credo sia difficile sbagliare, visto che esistono solo 4 possibilità....


  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    759
    Originariamente inviato da Veronica80
    Grumpy: Sin li ci arrivo!
    Non dubito che ci arrivi, però non lo attui

    Originariamente inviato da Veronica80 Il problema è che io non devo confrontare 2 periodi tra di loro per vedere se si accavallano (es il nuovo periodo che sto inserendo e uno da me scelto)...ma tutti i periodi nel database con quello nuovo!
    No, questo non è un problema. La query di tipo SELECT esaminerà tutti i record di "periodi" e tirerà fuori solo quelli che soddisfano la condizione WHERE.
    E' la condizione che è sbagliata: devi controllare se dataInizioPeriodo sta nell'intervallo delimitato da dataInizioNUOVO e dataFineNUOVO, oppure se nello stesso intervallo ci sta dataFinePeriodo.

    Per esempio:

    dataInizioPeriodo BETWEEN dataInizioNUOVO AND dataFineNUOVO
    OR
    dataFinePeriodo BETWEEN dataInizioNUOVO AND dataFineNUOVO

    E' uno dei molteplici modi.

  8. #8
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    Grazie mille!
    Ora provo!

    Io alla fine avevo coniato:

    "SELECT * FROM periodi WHERE dataFinePeriodo>=dataInizioNUOVO or dataFinePeriodo>=dataFineNUOVO"

    Ahah mi sa che non ho molto senso logico per le date me ne rendo conto! xD

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    759
    Fai comunque attenzione che l'indicazione che ti ho dato copre solo tre dei quattro casi a cui faceva riferimento gibra.
    Il suo suggerimento di rappresentare su carta le varie combinazioni ti toglierà ogni dubbio.

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.