Paginando por meses usando timestamps tipo unix

2553 visitas 3 respuestas

A raíz de una duda en el canal, encontré un par de soluciones en el manual siempre caótico de mysql que quizá os puedan interesar. Guardando las fechas en la bd en formato timestamp de unix se quería primero mostrar una lista de links tipo: Enero de 2004 Febrero de 2004 ... y despues mostrar los resultados en otro script tras haber pulsado el link. Siendo fecha el campo que contiene los timestamps para generar el listado de links podriamos usar: $meses=array("Enero","Febrero",....); $query="Select month(from_unixtime(fecha)),year(from_unixtime(fecha)) from tabla order by fecha"; $resid=mysql_query($query,$link); // Esto devuelve una lista ordenada de menor a mayor con el mes y año que consta en el timestamp de cada registro. while ($resultado=mysql_fetch_array($resid)) { if ($resultado[0]!=$mes && $resultado[1]!=ano) { $mes=$resultado[0]; $ano=$resultado[1]; echo "{$meses[$mes-1]} de $ano"; } }

Despues en el script destino, con un link tipo otrapagina.php?mes=5&ano=2003 podriamos

$query="Select * from tabla where month(from_unixtime(fecha))={$_GET['mes']} and year(from_unixtime(fecha))={$_GET['ano']}";

De aqui sacariamos todos los registros del mes y año seleccionados. Mas cosas curiosas sobre operaciones con fechas en mysql en: http://www.mysql.com/doc/en/Date_and_time_functions.html

por thessoro desde España

Registrado desde: 31 Jul 03

Respuestas

0 0

esseee!!! eres la pera, tio :D

por wave69 desde España

Registrado desde: 21 May 03
0 0

y lo que me enseñaste en el chat funciona pero que me recomiendas'

por Gerald desde Perú

Registrado desde: 17 Oct 03
0 0

Gerald hay muchas formas de llegar a una misma solución. Es tarea del programador no sólo resolver una tarea, sino intentar hacerlo de la forma más eficaz y menos pesada posible. A medida que avanzas y aprendes vas descubriendo que el código que has ido dejando atrás podía ser más eficiente, y que lo que antes hacías en 20 líneas ahora lo puedes resolver en una. Si no recuerdo mal, la solución que te propuse pasaba por el calculo del timestamp del mes siguiente usando strtotime (.......+1month), desconocía la función from_unixtime de mysql. Se podría decir que esta solución es algo más elegante que la anterior.

por thessoro desde España

Registrado desde: 31 Jul 03