2010-10-25 17 views
5

Ecco il mio codice finora:Come selezionare UNIX date = "2010" nella query mysql?

SELECT `date`, title, category, url 
FROM cute_news 
WHERE category = '4' 
ORDER BY `date` DESC 

voglio rendere le pagine in base all'anno, come 2010, 2009, 2008 e così via. Il database salva la data come UNIX_Timestamp. Non sei sicuro di come interrogare un recordset con un parametro Year?

WHERE unix_timestamp(YEAR) = '2010' or something??? 

Grazie in anticipo. Sono sconcertato.

risposta

4

Vorrete qualcosa come WHERE YEAR(FROM_UNIXTIME(date_field)) = 2010.

+0

Perfetto :-) Sapevo che mi mancava qualcosa di semplice ha. – eberswine

+0

@eberswine: tieni presente che una tale query sarà lenta se avrai molte righe nella tabella. Il database dovrebbe eseguire una scansione completa della tabella per filtrare le righe che si desidera ... D'altra parte, se si crea un indice sulla colonna 'date' (supponendo che uno non esiste già), è possibile utilizzare il Funzione 'UNIX_TIMESTAMP()' come nel secondo esempio nella mia risposta. Il database sarebbe quindi in grado di utilizzare l'indice per trovare rapidamente le righe che si desidera senza eseguire una scansione completa della tabella. –

+0

@Daniel, questo è vero se il campo della data è il miglior discriminatore. Spesso lo è, e naturalmente, non c'è nulla di male nel dare a MySQL l'opzione tramite la tua raccomandazione, anche se non ne ha bisogno. – Matthew

0

Prova:

WHERE YEAR(FROM_UNIXTIME(`date`)) = 2010; 
3

è possibile utilizzare la funzione di FROM_UNIXTIME(), ma essere consapevoli che questo non utilizzare un indice sulla colonna date, se ne esiste uno:

... WHERE YEAR(FROM_UNIXTIME(`date`)) = 2010 

Per la vostra query essere sargable, è possibile utilizzare invece la funzione UNIX_TIMESTAMP():

... WHERE `date` >= UNIX_TIMESTAMP('2010-01-01 00:00:00') AND 
      `date` < UNIX_TIMESTAMP('2011-01-01 00:00:00') 
+0

+1 più risposta adatta per tavoli più grandi ... –

Problemi correlati