Foros del Web » Programando para Internet » PHP »

Ordenar por fecha

Estas en el tema de Ordenar por fecha en el foro de PHP en Foros del Web. Hola. Estoy haciendo un sistema de noticias utilizando la siguiente tabla MySQL: Código: CREATE TABLE noticias ( id int(255) NOT NULL auto_increment, titulo varchar(255) NOT ...
  #1 (permalink)  
Antiguo 03/03/2006, 18:54
Avatar de kesthers  
Fecha de Ingreso: mayo-2004
Ubicación: Valencia
Mensajes: 358
Antigüedad: 13 años, 6 meses
Puntos: 2
Ordenar por fecha

Hola.
Estoy haciendo un sistema de noticias utilizando la siguiente tabla MySQL:

Código:
CREATE TABLE noticias (
  id int(255) NOT NULL auto_increment,
  titulo varchar(255) NOT NULL default '',
  subtitulo text NOT NULL,
  cuerpo text NOT NULL,
  fecha date NOT NULL default '0000-00-00',
  PRIMARY KEY  (id)
) TYPE=MyISAM;
Estoy intentando que el resultado sea algo así (en orden cronologico descendente):
  • 2006
    • Febrero
      • Titulo de noticia
      • Titulo de noticia
    • Enero
      • Titulo de noticia
  • 2005
    • Diciembre
      • Titulo de noticia

He estado probando con arrays bidimensionales pero hasta ahora no he encontrado la forma de hacerlo.

Alguna idea?
Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 03/03/2006, 19:42
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
primero que nada, tenés que traer los datos ordenados por fecha (ORDER BY fecha DESC)
Después, vas revisando las fechas de cada registro:

si (año_de_esta_fecha != año_fecha_anterior) {
escribís el año de la fecha que estás analizando;

si (mes_esta_fecha != mes_fecha_anterior) {
escribís el mes actual;
}
}
escribís la noticia;


Saludos.
  #3 (permalink)  
Antiguo 04/03/2006, 01:54
Avatar de kesthers  
Fecha de Ingreso: mayo-2004
Ubicación: Valencia
Mensajes: 358
Antigüedad: 13 años, 6 meses
Puntos: 2
Hola.
Os pongo el código que he creado con la idea de alvlin (gracias) por si a alguien le puede servir o por si quereis hacer alguna sugerencia

Código PHP:
$ano_anterior 0;
$mes_anterior 0;
$mes_printed 0;
$ani_printed 0;

$sql mysql_query("SELECT * FROM noticias ORDER BY fecha DESC");

while(
$noticia mysql_fetch_array($sql)) {

    
$fecha explode("-"$noticia['fecha']);

    if(
$fecha[0]!=$ano_anterior) {
        if(
$mes_printed==1) {
            echo 
"    </ul>\n";
        }
        if(
$ani_printed==1) {
            echo 
"  </ul>\n";
        }
        echo 
"  <h2>".$fecha[0]."</h2>\n";
        echo 
"  <ul>\n";
        
$mes_printed 0;
        
$mes_anterior 0;
    }

    if(
$fecha[1]!=$mes_anterior) {
        if(
$mes_printed==1) {
            echo 
"    </ul>\n";
        }
        echo 
"    <li><h3>".$fecha[1]."</h3></li>\n";
        echo 
"    <ul>\n";
    }

    echo 
"      <li><a href=\"#\"><strong>".$noticia['titulo']."</strong></a></li>\n";
    
$ano_anterior $fecha[0];
    
$mes_anterior  $fecha[1];
    
$mes_printed 1;
    
$ani_printed 1;
}

echo 
"    </ul>\n";
echo 
"  </ul>\n"
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:56.