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

    Ricerca fra un intervallo di date

    Ciao a tutti!

    Ho una tabella mysql chiamata db_pratiche con questa struttura:
    codice:
    id | id_pratica | id_addetto | data
    1 | 300 | 15 | 2010-02-10
    2 | 300 | 16 | 2010-02-10
    3 | 300 | 10 | 2010-02-08
    Ed una tabella db_prestazioni con questa struttura:
    codice:
    id | id_prestazione | id_associato_pratica | data
    1 | 90 | 300 | 2010-02-10
    2 | 95 | 300 | 2010-02-08
    A questo punto vorrei creare uno storico della pratica, che per ogni data presente nel db_pratiche mi visualizzi le prestazioni (estratte dal db_prestazioni) che sono state effettuate da quella data fino alla successiva, cioè in questo caso, dal 2010-02-10 al 2010-02-08 (ma ovviamente non saprò mai preventivamente che date possono esserci).

    E' possibile fare una ricerca di questo tipo?

    Premetto che ho già una query che mi raggruppa nel db_pratiche i record con data e id_pratica uguali.

  2. #2
    Codice PHP:
    $differenza=(strtotime("2010-03-26") - strtotime("2010-02-26"))/(86400); 
    Così hai la differenza in giorni
    Ce l'ho fatta! - ItalianPixel -

  3. #3
    Però all'interno del ciclo while (che utilizzo per mostrare a schermo i dati delle prestazioni) come faccio ad ottenere il record di data successivo?
    Altrimenti non riuscirei neanche ad effettuare la query sull'intervallo di date...

  4. #4
    Originariamente inviato da Pepo06
    ... come faccio ad ottenere il record di data successivo?
    Altrimenti non riuscirei neanche ad effettuare la query sull'intervallo di date...
    Non ho capito... spiega meglio.
    Ce l'ho fatta! - ItalianPixel -

  5. #5
    Provo ad essere più chiaro:

    In una pagina web ho una tabella che mi riepiloga i movimenti che una stessa pratica ha eseguito nel tempo. Come puoi notare dal post #1, ad uno stesso id_pratica possono essere associati id_addetti diversi e date diverse. Io in questa tabella raggruppo per data gli incaricati, ovviamente riferenti alla stessa pratica e stampo a schermo la tabella utilizzando un ciclo while dal momento che i dati sono memorizzati nel db.

    Quindi avrò:
    id_pratica | incaricati | data
    300 | 15, 16 | 2010-02-10
    300 | 10 | 2010-02-08

    Supponiamo che io voglia visualizzare le prestazioni effettuate dal 08/02/2010 (usiamo le date italiane va) al 10/02/2010, cioè sotto alla prima riga della tabella qui sopra.

    a questo punto creo una query del genere:
    codice:
    $query_prestazioni = "SELECT * FROM db_prestazioni WHERE associato_pratica='$id_pratica' AND data<='$datafine'";
    ovviamente così andrò a "prendere" tutte le prestazioni che sono minori di una certa data perchè non so come delimitare la data, in quanto non so come prelevare il valore che mi permetta di concludere la query con un "AND data>'$datainizio'".

  6. #6
    La query è giusta.
    Per estrarre due date TRA, si usa BETWEEN
    Codice PHP:
    $query_prestazioni "SELECT * FROM db_prestazioni WHERE associato_pratica='$id_pratica' AND BETWEEN '$datainizio' AND '$datafine' "
    Ce l'ho fatta! - ItalianPixel -

  7. #7
    Perfetto, con questo già mi hai tolto un problema, dal momento che non sapevo si facesse così...e quindi grazie!

    Ora però ti chiedo, per ottenere quella $datainizio, come posso fare?

    perchè il ciclo while è:
    Codice PHP:
    while ($array_pratiche mysql_fetch_assoc($result_pratiche)) {
    $id_pratica $array_pratiche['id_pratica'];
    $id_incaricato $array_pratiche['id_incaricato']; // Precedentemente raggruppato con GROUP
    $datafine $array_pratiche['data'];


    // Ora stampo la riga con la pratica
    echo "<tr>
            <td>
    $id_pratica</td>
            <td>
    $id_incaricato</td>
            <td>
    $datafine</td>
            </tr>"
    ;

    // Estraggo eventuali prestazioni eseguite tra la data della pratica precedente e quella successiva

    $query_prestazioni "SELECT * FROM db_prestazioni WHERE associato_pratica='$id_pratica' AND data<='$datafine'"// QUA ABBIAMO DETTO DI MODIFICARE CON BETWEEN
    $result_prestazioni mysql_query($query_prestazioni) or die(mysql_error());
    while(
    $array_prestazioni mysql_fetch_assoc($result_prestazioni)) {
    $data $array_prestazioni['data'];
    $prestazione $array_prestazioni['prestazione'];
    $cliente $array_prestazioni['cliente'];

    echo 
    "<tr style='background-color: red'>
            <td>
    $data</td>
            <td>
    $prestazione</td>
            <td>
    $cliente</td>
          </tr>"
    ;
    }

    Come ben puoi capire da questo codice, io ignoro in fase di costruzione quale possa essere il valore di DATA PRATICA successivo, cioè quello che mi andrebbe a popolare la variabile $datainizio.

    A meno che non esista un modo

  8. #8
    Beh, come decidi da quale a quale data estrapolare i dati?
    Ce l'ho fatta! - ItalianPixel -

  9. #9
    Io so solo, che in teoria, il $datainizio che mi servirebbe è il $datafine del successivo "passaggio" del ciclo while. Ma non credo sarà possibile ottenerlo in qualche modo, o al momento ignoro tale metodo.

  10. #10
    scusa ma se è una ricerca dovrai inserire i parametri in un form, no?
    Da quello invii le variabili alla pagina, le recuperi con $_POST['datainizio'] e la assegni alla variabile $datainizio, poi fai la stessa cosa con quella finale... no?
    Ce l'ho fatta! - ItalianPixel -

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.