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

    Prossimi compleanni in vista

    Ho una lista di utenti con campo mysql DATE della loro data di nascita. Vorrei realizzare una query che mi mostri il prossimo compleanno di chi sarà, e se possibile, anche in ordine di data crescente, i prossimi compleanni.
    Il 90% dei problemi di un pc si trova
    tra la tastiera e la sedia.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Vedi se ti va bene

    codice:
    select * from tabella
    where date_format(data_nascita,'%m-%d') >= date_format(curdate(),'%m-%d') 
    order by date_format(data_nascita,'%m-%d')

  3. #3
    Originariamente inviato da nicola75ss
    Vedi se ti va bene

    codice:
    select * from tabella
    where date_format(data_nascita,'%m-%d') >= date_format(curdate(),'%m-%d') 
    order by date_format(data_nascita,'%m-%d')
    faccio l'avvocato del diavolo....

    ma se volessi i compleanni dei prossimi due mesi da oggi???? che succederebbe a quelli di gennaio?




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

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Originariamente inviato da piero.mac
    faccio l'avvocato del diavolo....

    ma se volessi i compleanni dei prossimi due mesi da oggi???? che succederebbe a quelli di gennaio?



    Fai bene a farlo. In effetti era un pò approssimativa come query.

    codice:
    set @intervallo = 2;
    select * from (
    select *,
    if (right(curdate(),5) <= right(data_nascita,5),
    concat( year(curdate()),'-',date_format(data_nascita,"%m-%d")),
    concat( year(curdate()),'-',date_format(data_nascita,"%m-%d")) + interval 1 year) as comp
    from tabella) as tab
    where comp
    between curdate()
    and
    curdate() + interval @intervallo month
    order by comp
    Controllo quando sarà il prossimo compleanno di ciascun record. Se mese e giorno correnti sono minori o uguali a mese e giorno di nascita, modifico la data di nascita con l'anno corrente, altrimenti all'anno di nascita sostituisco l'anno prossimo.
    Una volta ricavato questo dato estraggo i record compresi nel range specificato dalla variabile intervallo.

  5. #5
    sara' che sono un sempliciotto.... e ragiono da tale .... ma mi pare la stessa cosa:

    codice:
    $delta = 2;
    
    select *
    from tabella
    where concat(year(curdate()), date_format(data_nascita, '%m%d'))
    between curdate() AND curdate() + interval $delta month
    order by data_nascita
    correggimi se sbaglio.

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

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ma così non estrae quelli nati ad esempio a gennaio.

  7. #7
    Originariamente inviato da nicola75ss
    Ma così non estrae quelli nati ad esempio a gennaio.
    si vede che non lo meritano.....

    between curdate() AND curdate() + interval $delta month

    between curdate() AND curdate() + interval $delta day /// se conti a giorni di anticipo





    @edit.... siccome vuole un certo numero di nomi (indefinito) in anticipo si presume a quantitativo e per periodo. per esempio a partire da oggi per due mesi (da oggi) e non i compleanni del mese.

    Almeno la interpreto cosi'.

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

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Originariamente inviato da piero.mac
    si vede che non lo meritano.....

    between curdate() AND curdate() + interval $delta month

    Mmm, non sono molto convinto. La mia query e la tua restituiscono risultati diversi (nella tua mi vengono a mancare due record in una mia tabellina di prova con date di nascita 1 e 28 gennaio) ma sicuramente avrai ragione tu.
    Stasera magari gli do un'occhiata con più calma.

  9. #9
    Originariamente inviato da nicola75ss
    Mmm, non sono molto convinto. La mia query e la tua restituiscono risultati diversi (nella tua mi vengono a mancare due record in una mia tabellina di prova con date di nascita 1 e 28 gennaio) ma sicuramente avrai ragione tu.
    Stasera magari gli do un'occhiata con più calma.
    ho editato....

    la mia versione considera 2 mesi da oggi.... e non i prossimi due mesi. anche perche' suppongo che il range non sia mensilizzato (e' troppo) ma al limite settimanale. In questo caso bastera' cambiare l'interval da sommare......

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

  10. #10
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Sì, ho visto. Avevo già scritto quando ho letto il tuo edit.

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.