Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

mysql.datetime select por meses.

Estas en el tema de mysql.datetime select por meses. en el foro de Bases de Datos General en Foros del Web. Veamos, el problema es un poco complicadillo. Utilizo mysql y php antes de nada. Tengo una tabla con un conjunto de textos. Tienen campos de ...
  #1 (permalink)  
Antiguo 14/04/2004, 17:03
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
mysql.datetime select por meses.

Veamos, el problema es un poco complicadillo. Utilizo mysql y php antes de nada. Tengo una tabla con un conjunto de textos. Tienen campos de texto y un campo de tipo datetime (aaaa/mm/dd hh:mm:ss). Queria mostrar un resultado mas o menos asi:

-Abril 2004(1)
-Marzo 2004(12)
-Febrero 2004(32)
-Enero 2004(12)
-Diciembre 2003(16)

El numero entre parentesis representa el numero de textos que tiene el mes. Bueno, aqui vienen los problemas, no se por donde empezar. Queria que se me mostrasen 5 meses incluido el mes actual, en orden inverso. Eso no creo que sea problema. La cosa es como extraer el mes de una fecha datetime. He pensado en una consulta:

select substring(fecha,3,2) as mes

Y esto me seleccionaria el mes. Ahora bien, sólo necesito que me muestre los 4 meses anteriores al actual, osea limitar la consulta (limit?), porque seria un gasto innecesario de memoria seleccionar todos los textos si solo necesito los de 4 meses atras.

Otro problema es cómo saber la cantidad de textos que tiene ese mes, ese ya no se ni por donde cogerlo.

Y por ultimo lo de poner el año, que no creo que sea un problema.




Se aceptan todo tipo de sugerencias.
Muchas gracias por vuestro tiempo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.

Última edición por derkenuke; 14/04/2004 a las 17:20
  #2 (permalink)  
Antiguo 14/04/2004, 20:32
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
esta funcion te servirá


DATE_FORMAT(date,format)
Formats the date value according to the format string. The following specifiers may be used in the format string: Specifier Description
%a Abbreviated weekday name (Sun..Sat)
%b Abbreviated month name (Jan..Dec)
%c Month, numeric (0..12)
%D Day of the month with English suffix (0th, 1st, 2nd, 3rd, ...)
%d Day of the month, numeric (00..31)
%e Day of the month, numeric (0..31)
%f Microseconds (000000..999999)
%H Hour (00..23)
%h Hour (01..12)
%I Hour (01..12)
%i Minutes, numeric (00..59)
%j Day of year (001..366)
%k Hour (0..23)
%l Hour (1..12)
%M Month name (January..December)
%m Month, numeric (00..12)
%p AM or PM
%r Time, 12-hour (hh:mm:ss followed by AM or PM)
%S Seconds (00..59)
%s Seconds (00..59)
%T Time, 24-hour (hh:mm:ss)
%U Week (00..53), where Sunday is the first day of the week
%u Week (00..53), where Monday is the first day of the week
%V Week (01..53), where Sunday is the first day of the week; used with %X
%v Week (01..53), where Monday is the first day of the week; used with %x
%W Weekday name (Sunday..Saturday)
%w Day of the week (0=Sunday..6=Saturday)
%X Year for the week where Sunday is the first day of the week, numeric, 4 digits; used with %V
%x Year for the week, where Monday is the first day of the week, numeric, 4 digits; used with %v
%Y Year, numeric, 4 digits
%y Year, numeric, 2 digits
%% A literal `%'.

http://dev.mysql.com/doc/mysql/en/Da...functions.html
  #3 (permalink)  
Antiguo 15/04/2004, 07:57
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Casi bien.

Gracias por recordarme la funcion claudiovega. Creo que lo he conseguido todo, el unico problema que tengo ahora es el orden. Voy a poner la estructura de la tabla para que nadie quede confuso.

TABLA 'TEXTOS':
Campo ; Tipo
id ; int(11)
titulo ; varchar(50)
fecha ; datetime
copete ; text
texto ; text
autor ; int(11)
categoria ; int(11)

No se ve muy claro pero espero que una idea ya se hagan. Lo importante es el campo y el tipo, el resto lo he omitido. El codigo que utilizo es este:

Código PHP:
$res=mysql_query("select titulo,date_format(fecha,'%c') as mes,date_format(fecha,'%Y') as ano,count(titulo) as textosEnMes from textos group by mes desc",$link);
$meses=Array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
while($row=mysql_fetch_array($res)) {
    $mesEscrito=$meses[ (int)$row["mes"]-1 ];
    $ano=$row["ano"]
    ?><li><a href="verMes.php?mes=<?=$mesEscrito?>&ano=<?=$ano?>">(mes<?=$row["mes"]-1?>)<?=$mesEscrito?>(<?=$row["textosEnMes"]?><?=$ano?></a></li><?
}
En la tabla tengo textos con los meses desde el actual (Abril) hasta Diciembre (en orden inverso al que utilizamos). El resultado que obtengo es este:
  • (mes3)Abril(15) 2004
  • (mes2)Marzo(4) 2004
  • (mes1)Febrero(2) 2004
  • (mes11)Diciembre(2) 2003
  • (mes0)Enero(4) 2004


Todo esta bien, salvo el diciembre, que se deberia colocal al final. El orden que seria ideal es 12,11,10,9,8,7,6,5,4,3,2,1,0,12,11... Bueno ya me entienden. En este orden el Diciembre (11) y Noviembre (10) se me colarian entre el 1 y el 0. Asi que, ¿Como se soluciona esto?


Espero haberme explicado bien.

Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.

Última edición por derkenuke; 15/04/2004 a las 08:05
  #4 (permalink)  
Antiguo 15/04/2004, 08:23
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Es que no es el mes el que determina este "ciclo", sino el año. Haz algo como:

GROUP BY ano DESC, mes DESC

Saludos.

PD: año en SQL suena mejor anyo que ano, ¿no creen?
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 15/04/2004, 08:28
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Eso es!!

Resultado perfecto, gracias Josemi.


PD: No se porque pero ya me he acostumbrado a poner ano, por mal que suene asi si alguien hackea el servidor y ve mi codigo ( ) se reira un rato

__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
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 14:35.