2010-10-25 14 views
5

Aquí está mi código hasta ahora:¿Cómo seleccionar UNIX date = "2010" en la consulta de mysql?

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

quiero hacer las páginas basadas en el año, como 2010, 2009, 2008 y así sucesivamente. La base de datos guarda la fecha como UNIX_Timestamp. ¿No está seguro de cómo consultar un conjunto de registros con un parámetro de año?

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

Gracias de antemano. Estoy desconcertado.

Respuesta

4

Querrá algo como WHERE YEAR(FROM_UNIXTIME(date_field)) = 2010.

+0

Perfecto :-) Sabía que me estaba perdiendo algo simple, ja. – eberswine

+0

@eberswine: tenga en cuenta que tal consulta será lenta si va a tener muchas filas en su tabla. La base de datos necesitaría realizar un escaneo completo de la tabla para filtrar las filas que desea ... Por otro lado, si crea un índice en la columna 'date' (suponiendo que uno no exista), puede usar el 'UNIX_TIMESTAMP()' función como en el segundo ejemplo en mi respuesta. La base de datos podría usar el índice para encontrar rápidamente las filas que desea sin realizar una exploración de tabla completa. –

+0

@Daniel, eso es cierto si el campo de fecha es el mejor discriminador. A menudo lo es, y por supuesto, no hay daño en darle la opción a MySQL a través de su recomendación, incluso si no lo necesita. – Matthew

0

Probar:

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

Usted puede utilizar la función FROM_UNIXTIME(), pero tenga en cuenta que esto no va a utilizar un índice en la columna de la date, si es que existe:

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

para su búsqueda de ser sargable, podría utilizar la función UNIX_TIMESTAMP() en su lugar:

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

+1 respuesta más adecuada para tablas más grandes ... –

Cuestiones relacionadas