Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Query con date

  1. #1
    Utente di HTML.it L'avatar di zeroh
    Registrato dal
    Feb 2002
    Messaggi
    138

    Query con date

    Ragazzi ho un problema e cerco un aiuto.
    Supponiamo che io abbia un database con i seguenti campi:

    Nome Cognome DataUltimoPagamento

    Mi servirebbe costruire una pagina PHP dove faccia una SELECT dei NOME e COGNOME il cui confronto tra la data dell'ultimo pagamento e NOW() risulti distante 20MESI (non 21 o 19 solo i 20Mesi).
    Come posso FARE???

    Grazie.

  2. #2
    Devi precisare cosa intendi per 20 mesi e non 21 o 19... preciso:

    oggi 18-05-2005 - 20 mesi = 19-09-2003

    Quale sarebbe il range di date da selezionare? solo quelle del 19/9/2003?? oppure da ... a del mese di settembre 2003?

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

  3. #3
    Utente di HTML.it L'avatar di zeroh
    Registrato dal
    Feb 2002
    Messaggi
    138

    :)

    Diciamo che mi occorrebbe selezionare tutti quelli di settembre cio+ tutti quelli che si trovano nel ventesimo mese dopo la data.

  4. #4

    Re: :)

    [supersaibal]Originariamente inviato da zeroh
    Diciamo che mi occorrebbe selezionare tutti quelli di settembre cio+ tutti quelli che si trovano nel ventesimo mese dopo la data. [/supersaibal]
    forse vorrai dire prima....
    prova...
    codice:
    SELECT * from tabella
    where
    MONTH(curdate() - interval 20 month) = MONTH(datapagamento)
    AND
    YEAR(curdate() - interval 20 month) = YEAR(datapagamento)
    and
    datapagamento between datapagamento - interval 30 day
    AND CURDATE() - interval 20 month
    dimmi se va... non posso provarla...

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

  5. #5
    ma riguardando la query forse basta solo la clausola con between...

    month and year l'ho messo per identificare il mese / anno.... ma credo basti il between ... prova.


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

  6. #6
    Utente di HTML.it L'avatar di zeroh
    Registrato dal
    Feb 2002
    Messaggi
    138
    Piero Grazie mIlle fUNZiona alla grande, ora credo che sia doveroso studiarmi queste benedette date, un altra piccola domanda, se volessi invece solo quelli che proprio OGGI distano 20 mesi? cosa dovrei modificare nella query?

  7. #7
    Sbagliato invece.... perche' la query ti rende le date tra ultimo pagamento -30 giorni e oggi - 20 mesi .....

    la query corretta dovrebbe essere invece:
    codice:
    SELECT * from tabella
    where datapagamento between  
    (curdate() - interval 20 month) - interval 30 day
    AND
    curdate() - interval 20 month
    capita se non puoi provare....



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

  8. #8
    [supersaibal]Originariamente inviato da zeroh
    un altra piccola domanda, se volessi invece solo quelli che proprio OGGI distano 20 mesi? cosa dovrei modificare nella query? [/supersaibal]
    sarebbe elementare....
    codice:
    SELECT * from tabella
    where datapagamento = curdate() - interval 20 month
    Le date le ho studiate in questa pillola...

    http://forum.html.it/forum/showthrea...hreadid=459634

    anche per fare questa tua query....






    ma quel pirla di autore potrebbe anche farne una sulle novita' di mysql 4.1

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

  9. #9
    Utente di HTML.it L'avatar di zeroh
    Registrato dal
    Feb 2002
    Messaggi
    138
    Vediamo se ho capito bene ok?

    se creo una query di questo tipo per esempio

    $query='SELECT * from pagamenti where
    ultimopagamento <= (curdate() - interval 20 month) - interval 30 day AND ultimopagamento <= curdate() - interval 20 month';

    seleziono tutte le persone che non pagano da più di venti mesi (venti compreso)

    Vero?

  10. #10
    Originariamente inviato da zeroh
    Vediamo se ho capito bene ok?

    se creo una query di questo tipo per esempio

    $query='SELECT * from pagamenti where
    ultimopagamento <= (curdate() - interval 20 month) - interval 30 day AND ultimopagamento <= curdate() - interval 20 month';

    seleziono tutte le persone che non pagano da più di venti mesi (venti compreso)

    Vero?
    vediamo il famoso trucco della valigia...

    Come faccio a sapere in modo semplice di quale periodo stiamo parlando???

    facciamo una SELECT...
    codice:
    SELECT (curdate() - interval 20 month) - interval 30 day AS start,
    curdate() - interval 20 month as end
    copia e appiccica in phpmyadmin.... la risposta e':
    codice:
    start        end  
    2003-08-25   2003-09-24
    Quindi selezioni tutte le persone con ultimo pagamento effettuato dal 25-08-2003 al 24-09-2003 compreso. Si potrebbe invece di (-20 mesi -30 giorni) fare (-19mesi + 1 giorno)... ma il nocciolo e' lo stesso. Se vuoi escludere la corrispondenza del 24 (oggi) basta togliere = e lasciare solo minore nella seconda parte di AND...


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

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.