Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [MYSQL] Calcolo giorni passati o futuri per un compleanno

    Ho questa Query che calcola i giorni piu' vicini, passati o futuri per un compleanno.
    Codice PHP:
    $Query1 "SELECT DATE_FORMAT(data_nascita,'%d-%m-%Y') AS nato, 
    DATEDIFF(CURDATE(), DATE_FORMAT(data_nascita + INTERVAL YEAR(CURDATE()) - YEAR(data_nascita) YEAR,'%Y-%m-%d')) as diff 
    FROM sql_agenda 
    WHERE DATEDIFF(CURDATE(), DATE_FORMAT(data_nascita + INTERVAL YEAR(CURDATE()) - YEAR(data_nascita) YEAR,'%Y-%m-%d')) BETWEEN -30 AND 30  
    ORDER BY diff DESC
    "

    Da un controllo visivo sembra funzionare però ci sono un paio di dubbi.

    L'istruzione che mi incuriosisce è questa
    Codice PHP:
    DATE_FORMAT(data_nascita INTERVAL YEAR(CURDATE()) - YEAR(data_nascitaYEAR,'%Y-%m-%d'

    Perchè nella WHERE non posso usare l'alias definito nella SELECT?
    Che cosa fa l'ultimo YEAR presente nella istruzione della SELECT e della WHERE?
    Se tento di toglierlo la Query mi va in errore.

    Visto che questa istruzione non mi è chiara, sarei grato a chi me la spiegherebbe.

    Grazie per l'attenzione.
    Ultima modifica di micdas; 01-04-2014 a 19:18

  2. #2
    qualche delucidazione?
    Ringrazio

  3. #3
    mi pare strano sommare e poi sottrarre lo stesso valore di anno.

    Potresti anche fare cosi':

    Codice PHP:
    SELECT DATE_FORMAT(data_nascita,'%d-%m-%Y') AS nato
    DATEDIFF(
    CURDATE(), concat(year(now()), date_format(data_nascita'-%m-%d')) 
    ) as 
    diff 
    FROM sql_agenda 
    WHERE  
    DATEDIFF
    (CURDATE(), concat(year(now()), date_format(data_nascita'-%m-%d')) 
    BETWEEN -30 AND 30  
    ORDER BY diff DESC 
    nel where non puoi usare l'alias dichiarato nella select perche' il where viene risolto prima dei campi, subito dopo il nome tabella.
    In pratica viene fatta una scelta dei record che rispettano la richiesta where, viene composta una tabella temp con solo i record interessati e su questi viene imposta la selezione e l'order by

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

  4. #4
    Grazie, piero.mac,
    hai chiarito e dato un suggerimento valido (già testato e funzionante).
    Ho utilizzato quello che ho presentato perchè non conoscendo il modo per ottenere quel che volevo ho adottata quella Query trovata con grande difficoltà.
    Certo che la tua versione, facendo uso di minori funzioni, dovrebbe essere senz'altro più performante.

    Giusta anche l'osservazione che hai fatto sulla WHERE.

    Grazie

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.