2012-02-23 16 views
6

Quiero agrupar los datos en la tabla de mi blog por fecha.¿Cómo se agrupa por fecha con el registro activo de Codeigniter?

Tengo un campo de fecha y hora en mi base de datos que usaré para agrupar mis datos por mes y año. (Ejemplo 2012-01-23 17:25:18)

he añadido el código siguiente para mi modelo en un intento por grupo de mis datos por mes y año (como un archivo)

function get_archive_links(){ 

     $this->db->order_by('date','desc'); 
     $this->db->group_by(Month('date'), Year('date')); 
     $query = $this->db->get('blog'); 

    foreach ($query->result() as $row) { 
     $data[] = array(
      'id' => $row->id, 
      'date' => $row->date 
     ); 
    } 

    return $data; 
} 

Pero recibo el siguiente error: Fatal error: Call to undefined function Month()

desea que los resultados se ven como:

  • de febrero de 2012
  • de enero de 2012
  • de diciembre de 2012

Respuesta

8

esta línea,

$this->db->group_by(Month('date'), Year('date')); 

Month is php function this line. Si quieres MES uso de SQL y la función AÑO, esta línea debe ser así,

$this->db->group_by('MONTH(date), YEAR(date)'); 
1

Su consulta debe ser

$this->db->group_by('date'); 

No se puede ejecutar funciones SQL a través de activerecord de CI a menos que utilice el método de consulta

$this->db->query("GROUP BY MONTH('date')"); 
+1

Eso funciona un poco. Pero obtengo más de 1 resultado por mes. ¿Cómo puedo mostrar (enero de 2012, febrero de 2012, etc.) en formato de archivo? – hairynuggets

+0

¿Cómo se ve la tabla? son los meses y años en columnas separadas? –

1

Es muy simple intente esto en Active Record

$result = $this->db->select('DISTINCT DATE_FORMAT(`t`.`date_field`, "%M %Y") `myformat`', FALSE)->from('my_table `t`')->group_by('MONTH(`t`.`date_field`)')->order_by('t.date_field', 'DESC')->get()->result(); 
print_r($result); 

o simples consultas

SELECT DISTINCT 
    DATE_FORMAT(`t`.`date_field`, "%M %Y") `myformat` 
FROM 
    (`my_table` `t`) 
GROUP BY MONTH(`t`.`date_field`) 
ORDER BY `t`.`date_field` DESC; 

Matriz de impresión de salida

[0] => stdClass Object 
    (
     [myformat] => August 2011 
    ) 

[1] => stdClass Object 
    (
     [myformat] => July 2011 
    ) 

[2] => stdClass Object 
    (
     [myformat] => June 2011 
    ) 

[3] => stdClass Object 
    (
     [myformat] => March 2011 
    ) 

Espero que esto te ayude. ¡¡Gracias!!

Cuestiones relacionadas