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

    [mysql] estrarre i dati relativi a un specifico giorno/mese/anno

    ciao,

    devo fare una ricerca di tutti gli articoli presenti all'interno del DB per mese e anno specificati.

    la tabella si chiama "article" e il campo di ricerca è "pubblication_date" ( datetime)

    $anno = $_POST['anno'];
    $mese = $_POST['mese'];

    con questa query:

    SELECT title
    FROM `article`
    WHERE pubblication_date = CURDATE( )
    LIMIT 0 , 30

    non faccio altro che estrarre il dato che è stato inserito con data odierna e ovviamente non è sufficiente.

    a me serve sapere tutti gli articoli pubblicati per quell'anno, il mese e anche il giorno fino alla data odierna. fino alla data odierna perchè potrebbero esserci date di pubblicazione superiori alla data odierna, cioè programmate per essere pubblicate in futuro.

    grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    161

    Re: [mysql] estrarre i dati relativi a un specifico giorno/mese/anno

    non ho capito cosa centra
    $anno = $_POST['anno'];
    $mese = $_POST['mese'];
    comunque... con la query che hai scritto recuperi solo il titolo degli articoli con data odierna.
    Non mi pare che non ci sia nulla di complicato nel tuo "problema", sono le basi di mysql, basta leggere una guida

  3. #3
    Devi fare una cosa del genere:

    codice:
    SELECT title
    FROM `article`
    WHERE 
    year(pubblication_date) = 'anno' AND 
    month(pubblication_date) = 'mese' AND 
    day(pubblication_date) = 'giorno'
    LIMIT 0 , 30
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  4. #4
    esatto! questo mi serviva.

    solo una cosa. Dato che la ricerca viene eseguita per mese e anno,

    day(pubblication_date) = 'giorno'

    non mi va bene, perchè nella ricerca non lo specifico, ma mi deve dare tutti record presenti per il mese ad esempio, Marzo, fino alla data odierna.

    ho provato con day(pubblication_date) = CURDATE() ma mi sa che non centra una mazza, infatti non mi stampa nulla...

  5. #5
    Prova così:

    codice:
    ...
    dayofmonth(pubblication_date) <= dayofmonth(now())
    ...
    Non l'ho provata ma come idea di base può andare.
    Ovviamente puoi sostituire gli "=" con ">" o "<" ecc. a seconda delle tue necessità.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  6. #6
    si funziona satifal. grazie mille!
    ma c'è ancora un problema....

    mi è venuto il dubbio nel caso la ricerca venisse fatta per un anno antecedente al 2011

    SELECT title
    FROM `article`
    WHERE YEAR( pubblication_date ) = '2010'
    AND MONTH( pubblication_date ) = '03'
    AND DAYOFMONTH( pubblication_date ) <= DAYOFMONTH( NOW( ) )
    LIMIT 0 , 30

    ho creato un articolo e ho messo come anno e mese di pubblicazione nel campo "pubblication_date" il 13 marzo 2010

    non me lo trova.....

  7. #7
    La funzione month() restituisce i mesi senzo lo zero davanti, quindi Marzo = 3.
    Inoltre se vuoi modificare la logica della select considera che le condizioni attualmente sono in AND per cui devono essere tutte verificate.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  8. #8
    le funzioni YEAR, MONTH e DAYOFMONTH vanno benissimo così come sono, ma la query così com'è funziona bene solo per l'anno corrente.

    Non conosco bene le funzioni mysql....
    bisognerebbe fare in modo che riconosca l'anno, cioè se la ricerca viene eseguita in un anno antecedente all'attuale non deve tenere conto di DAYOFMONTH, ma solo MONTH.

    si può fare, oppure devo ricorrere a php e fare un controllo sulla variabile $_POST['anno'], e fare 2 query separate in base se il valore è = o < all'anno attuale?

  9. #9
    La seconda che hai detto. Se l'anno è quello attuale fai la quey senza la condizione che verifica il giorno.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

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.