Tema destacado: Entra al canal IRC oficial de #elhacker.net
Autor
|
Tema: [mysql] Consultar mediante rango de fechas en una sola sentencias ? (Leído 7,188 veces)
|
Diabliyo
Desconectado
Mensajes: 1.270
M.S.I Angel Cantu
|
Buenas. En mi sistema manejo datos que requiero consultar de MySQL que esten dentro del dia actual, vaya, que los datos que se consulten sean del mes/a~o actual. Cada vez que se insertan datos nuevos existe una entrada en la tabla llamada FECHA en donde se guarda directamente la fecha obtenida mediante la funcion time(). Como puedo consultar los datos que concuerden con la fecha actual ? Como solucion (momentanea) lo que hago es esto: <?php # Esta es la tabla (fictisia) # create table DATOS ( # TITULO VARCHAR(100) not NULL, # MENSAJE TEXTnot NULL, # FECHA VARCHAR(100) not NULL # );
$link= conectar(); $cons= mysql_query( "select * from DATOS;", $link ); if( mysql_num_rows($cons) ) { $cont=0; # contador while( $buf=mysql_fetch_array($cons) ) { # buscamos entrada del mes y a~o actual if( !strcmp( date("m/y", time()), date("m/y", $buf["FECHA"]) ) ) # si es el mes/a~o actual $cont++; } } echo 'Se encontraron en este mes <b>'. $cont. '</b> resultados.'; mysql_free_result($cons); mysql_close($link); ?>
|
|
|
|
« Última modificación: 10 Marzo 2011, 04:34 por Diabliyo »
|
En línea
|
|
|
|
Shell Root
Desconectado
Mensajes: 2.456
Alex Jurado
|
What da faq! Porque no lo haces directamente en la consulta del MySQL. Es decir, SELECT * FROM DATOS WHERE (fecha = 'fecha-actual');
|
|
|
|
|
En línea
|
 ---
|
|
|
Diabliyo
Desconectado
Mensajes: 1.270
M.S.I Angel Cantu
|
What da faq! Porque no lo haces directamente en la consulta del MySQL. Es decir, SELECT * FROM DATOS WHERE (fecha = 'fecha-actual'); Como ?... En el scrpt contabilizo las entradas que se hayan echo el MES y A~O actual, como lo haria directo en MySQL ? Saludos !
|
|
|
|
|
En línea
|
|
|
|
Shell Root
Desconectado
Mensajes: 2.456
Alex Jurado
|
Pero es que no entiendo, explicanos con ejemplos reales.
|
|
|
|
|
En línea
|
 ---
|
|
|
Diabliyo
Desconectado
Mensajes: 1.270
M.S.I Angel Cantu
|
Pero es que no entiendo, explicanos con ejemplos reales.
Es por demas, lee el ejemplo...
|
|
|
|
|
En línea
|
|
|
|
Shell Root
Desconectado
Mensajes: 2.456
Alex Jurado
|
Cual? ahhahaa
|
|
|
|
|
En línea
|
 ---
|
|
|
Diabliyo
Desconectado
Mensajes: 1.270
M.S.I Angel Cantu
|
Cual? ahhahaa
Pues el que esta en el primer post :S daaaaaaaa !
|
|
|
|
|
En línea
|
|
|
|
Shell Root
Desconectado
Mensajes: 2.456
Alex Jurado
|
Con ejemplos reales, me refiero a los datos que están la base de datos. Y explicando lo que quieres extraer... ¬¬!
|
|
|
|
|
En línea
|
 ---
|
|
|
Diabliyo
Desconectado
Mensajes: 1.270
M.S.I Angel Cantu
|
Con ejemplos reales, me refiero a los datos que están la base de datos. Y explicando lo que quieres extraer... ¬¬!
fijate en el script que puse en el primer post, lo que hago es contabilizar las entradas que se publicaron en el MEs y A~O actual, pero es algo pesado cuando ya se tienen MUCHOS DATOS en la bas e:(, vaya, como podria hacerle para directamente en la sentencia MySQL solo consultar los datos que sean del MES y A~O actuales ? Se puede o no ? Saludos !
|
|
|
|
|
En línea
|
|
|
|
Shell Root
Desconectado
Mensajes: 2.456
Alex Jurado
|
La siguiente consulta selecciona todos los registros con un valor date_col dentro de los últimos 30 días: mysql> SELECT something FROM tbl_name -> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col; :http://dev.mysql.com/doc/refman/5.0/es/date-and-time-functions.html
|
|
|
|
|
En línea
|
 ---
|
|
|
Diabliyo
Desconectado
Mensajes: 1.270
M.S.I Angel Cantu
|
La siguiente consulta selecciona todos los registros con un valor date_col dentro de los últimos 30 días: mysql> SELECT something FROM tbl_name -> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col; :http://dev.mysql.com/doc/refman/5.0/es/date-and-time-functions.html Ya estuve leyendo antes eso, pero me pregunto si funcionara cuando la FECHa se guarda tomando el dato de time() ?... Porque en los ejemplos, las consultas son: year-mont-day... Y el formato de time() es un numero decimal largo !
|
|
|
|
|
En línea
|
|
|
|
Nakp
casi es
Ex-Staff
Desconectado
Mensajes: 6.334
he vuelto :)
|
Spara comenzar... el campo FECHA debe ser de tipo DATE en vez de varchar, segundo puedes sacar por año, mes o fecha actual utilizando una condicion en where (en el sql) SELECT * FROM DATOS WHERE FECHA = CURDATE() y cuando insertas (si solon necesitas fecha, sin hora) puedes usar la misma funcion en sql, o NOW() si es por mes o año actual? SELECT * FROM DATOS WHERE YEAR(FECHA) = YEAR(CURDATE()) SELECT * FROM DATOS WHERE YEAR(FECHA) = 2011 funcionarian exactamente igual :p SELECT * FROM DATOS WHERE MONTH(FECHA) = MONTH(CURDATE()) SELECT * FROM DATOS WHERE MONTH(FECHA) = 3 ELECT * FROM DATOS WHERE MONTHNAME(FECHA) = 'March' para marzo xD
|
|
|
|
« Última modificación: 10 Marzo 2011, 05:57 por Nakp »
|
En línea
|
Ojo por ojo, y el mundo acabará ciego.
|
|
|
Diabliyo
Desconectado
Mensajes: 1.270
M.S.I Angel Cantu
|
Spara comenzar... el campo FECHA debe ser de tipo DATE en vez de varchar, segundo puedes sacar por año, mes o fecha actual utilizando una condicion en where (en el sql) SELECT * FROM DATOS WHERE FECHA = CURDATE() y cuando insertas (si solon necesitas fecha, sin hora) puedes usar la misma funcion en sql, o NOW() si es por mes o año actual? SELECT * FROM DATOS WHERE YEAR(FECHA) = YEAR(CURDATE()) SELECT * FROM DATOS WHERE YEAR(FECHA) = 2011 funcionarian exactamente igual :p SELECT * FROM DATOS WHERE MONTH(FECHA) = MONTH(CURDATE()) SELECT * FROM DATOS WHERE MONTH(FECHA) = 3 ELECT * FROM DATOS WHERE MONTH(FECHA) = 'March' para marzo xD Bueno vamos por partes para tomar todo bien y hacer la implementacion en mi sistema.... Actualmente cuando guardo un registro, lo hago asi: mysql_query( "inser into DATOS( ID, MENSAJE, FECHA ) values('123', 'abc', '". time(). "');", $link );Si cambio el campo FECHA VARCJAR(100) NOT NULL a FECHA DATE, tendria problemas con la forma actual de guardar mis datos ? Saludos !
|
|
|
|
|
En línea
|
|
|
|
Nakp
casi es
Ex-Staff
Desconectado
Mensajes: 6.334
he vuelto :)
|
time() es un timestamp en formato unix... cambia por mysql_query( "inser into DATOS( ID, MENSAJE, FECHA ) values('123', 'abc', NOW());", $link); //o mysql_query( "inser into DATOS( ID, MENSAJE, FECHA ) values('123', 'abc', CURDATE());", $link);dependiendo si necesitas el timestamp (fecha y hora) o solo la fecha
|
|
|
|
|
En línea
|
Ojo por ojo, y el mundo acabará ciego.
|
|
|
Nakp
casi es
Ex-Staff
Desconectado
Mensajes: 6.334
he vuelto :)
|
La siguiente consulta selecciona todos los registros con un valor date_col dentro de los últimos 30 días: mysql> SELECT something FROM tbl_name -> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col; :http://dev.mysql.com/doc/refman/5.0/es/date-and-time-functions.html supon que es febrero  o diciembre que tiene 31 :O
|
|
|
|
|
En línea
|
Ojo por ojo, y el mundo acabará ciego.
|
|
|
|
|