Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725

    [Mysql] Trovare data in un range

    Ciao a tutti, intanto premetto che non sono sicuro si possa fare cio solo tramite sql...

    Ho una tabella con

    id (autoincrementale)
    data_inizio
    data_fine
    descrizione
    tempo_trascorso

    Bene tramite una pagina inserisco la descrizione e le due date e le mette in db, poi fa la differenza tra le due date e segna i giorni trascorsi.

    Esempio

    1 | 2010-01-01 | 2010-01-10 | Ricerca Alfa| 10

    Bene a me serve fare un controllo in piu, controllare se le due date inviate tramite form siano comprese nel periodo già indicato (con la stessa descrizione) e nel caso non contare i giorni in comune.

    Esempio

    In database ho:
    1 | 2010-01-01 | 2010-01-10 | Ricerca Alfa| 10

    Faccio di nuovo una ricerca con descrizione: Ricerca Alfa che va dal 2010-01-04 al 2010-01-20. Come si nota la ricerca combacia per un periodo, dal 04/01 al 10/01 quindi devo conteggiare solamente i giorni dal 10 al 20 in questo caso. Ma possiamo avere anche altri casi. Ad esempio che vada dal 2009-12-20 al 2010-01-20 quindi dovrebbe conteggiare i giorni giusti meno il periodo già conteggiato.

    Nel caso posso gestirlo anche in PHP ma non saprei proprio come fare questo controllo
    Originariamente inviato da qazar
    Se finisci di leggere il thread mi sono corretto,è solo i kernel scritto in html.
    Originariamente inviato da rnlflame
    Comunque non dovevano crollare

  2. #2
    Ho letto il thread almeno 10 volte senza capirci un granche'.

    In pratica hai un campo calcolato nel db e' gia' qui si dovrebbe presumere, perche' il campo abbia senso, che hai contato solo i giorni tra le due date non conteggiate da altri record. Poi potrebbero esserci buchi cioe' nessuna data, ma il tempo, bonta' sua, passa lo stesso quindi come fai a sapere se, come e quando fosse gia' stato conteggiato o meno un dato periodo????

    E se le sovrapposizioni fossero piu' di una? Sembrerebbe piu' un quesito per uno spreadsheet che per un database. Ammesso di poterlo fare riceveresti come risposta un numero di cui non saresti in condizione di controllarne la validita' e sopratutto di sapere "quali" di questi giorni sono quelli non contati da altri record. E poi se conti i tuoi giorni che succede se fai una ricerca con dati inseriti in precedenza? E poi il range di date ... a quando pare sono libere come estensione di periodo cioe' possono avere una qualsiasi durata ... Diciamo che la vedo dura, o forse basterebbe valutare diversamente il progetto

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725
    Ok provo a fare un esempio dettagliato.

    Ho un form cosi composto:
    codice:
    Numero Telefono: 
    Inizio Periodo:
    Fine Periodo:
    Io compilo tutti i dati e invio il form. In una tabella lui salva Numero Telefono, Data Inizio Periodo, Data Fine Periodo e Giorni Trascorsi (ottenuti tramite differenza).

    All'inizio la tabella sarà vuota, poi man mano che ricerco va ad inserire i dati del form nella tabella e fin qua tutto va bene.

    Ho bisogno però di una cosa alquanto 'incasinata'.

    Prendiamo ad esempio i seguenti Record nella tabella.
    N. Telefono | Data Inizio | Data Fine | Giorni
    0000000001| 10-01-2010| 13-01-2010 | 3
    0000000002| 01-02-2010| 03-02-2010 | 2
    0000000001| 15-10-2010| 30-10-2010 | 15
    Ora come si nota c'è stata una ricerca per il numero 000000001 in questi due periodi (10/01 - 13/01) e (15/10 - 30/10).
    Ora facciamo finta che vogliamo fare una ricerca per questo numero di telefono tra il 25/10 al 01/11, questo periodo conta 7 Giorni. Quindi normalmente mi stamperebbe questa linea
    0000000001| 25-10-2010| 01-11-2010 | 7
    Il problema sorge qua, come si può notare tra l'ultima ricerca [15/10 - 30/10] e questa [25/10 - 01/11], ci sono dei periodi in comune, l'intervallo ricopre i giorni tra il 25 e il 30, quindi dovrei trovare un modo per fare un controllo preventivo, prima di fare l'inserimento della linea in database devo vedere se per gli altri record con lo stesso N. Telefono, ci sono periodi con intervalli in comune perchè in questo caso dobbiamo conteggiare solamente 2 giorni, il 31/10 e l' 1/11 in quanto gli altri giorni, dal 25 al 30 sono già stati conteggiati nell'altra ricerca.

    Spero di esser stato chiaro, grazie mille
    Originariamente inviato da qazar
    Se finisci di leggere il thread mi sono corretto,è solo i kernel scritto in html.
    Originariamente inviato da rnlflame
    Comunque non dovevano crollare

  4. #4
    una domanda. nel db salveresti comunque la riga

    0000000001| 25-10-2010| 01-11-2010 | 7

    ???

    oppure salveresti

    0000000001| 25-10-2010| 01-11-2010 | 2

    o ancora

    0000000001| 31-10-2010| 01-11-2010 | 2

    ???

  5. #5
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725
    Salverei questa

    0000000001| 25-10-2010| 01-11-2010 | 2

    In quanto salvo il periodo ricercato effettivamente e i giorni conteggiati



    (Mi sa è molto complicata la cosa ma sono aperto ad ogni consiglio )
    Originariamente inviato da qazar
    Se finisci di leggere il thread mi sono corretto,è solo i kernel scritto in html.
    Originariamente inviato da rnlflame
    Comunque non dovevano crollare

  6. #6
    quindi potrebbe ricapitare una stessa richiesta, su un periodo a cavallo di due richieste precedenti, e tu salveresti zero. es:

    0000000001| 25-10-2010| 31-10-2010 | 0

    corretto?

  7. #7
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725
    Esattamente
    Originariamente inviato da qazar
    Se finisci di leggere il thread mi sono corretto,è solo i kernel scritto in html.
    Originariamente inviato da rnlflame
    Comunque non dovevano crollare

  8. #8
    il giro che mi viene in mente è complesso.

    1. analizzi la tabella, ed esplodi i periodi in una tabella temporanea di giorni singoli coperti
    2. esplodi il periodo inserito nella form in un'altra tabella temporanea di singoli giorni richiesti
    3. le metti in JOIN e ti conti i giorni che non corrispondono

    più che complesso è palloso

  9. #9
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725
    Avevo pensato alla lontana una cosa simile, solo che mi chiedo, c'è la possibilità, dato inizio e fine periodo di ottenere tutte le date comprese? Nel caso lo posso ottenere tramite Sql o Php?

    So che purtroppo è pesante e palloso ma per chi richiede le modifiche la cosa è semplice

    Cito :'Si poi basta vedere se il periodo è compreso'...

    (E che vuoi che sia... )
    Originariamente inviato da qazar
    Se finisci di leggere il thread mi sono corretto,è solo i kernel scritto in html.
    Originariamente inviato da rnlflame
    Comunque non dovevano crollare

  10. #10
    la cosa che ti serve sicuramente è avere una tabella di riferimento con tutti i giorni. la fai una volta e non ci pensi più. con quella poi il discorso è semplice

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.