elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [mysql] Consultar mediante rango de fechas en una sola sentencias ?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: [mysql] Consultar mediante rango de fechas en una sola sentencias ?  (Leído 32,950 veces)
Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: [mysql] Consultar mediante rango de fechas en una sola sentencias ?
« Respuesta #10 en: 10 Marzo 2011, 05:37 am »

La siguiente consulta selecciona todos los registros con un valor date_col dentro de los últimos 30 días:
Código
  1. mysql> SELECT something FROM tbl_name
  2.    -> 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 Desconectado

Mensajes: 6.336

he vuelto :)


Ver Perfil WWW
Re: [mysql] Consultar mediante rango de fechas en una sola sentencias ?
« Respuesta #11 en: 10 Marzo 2011, 05:47 am »

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)

Código
  1. 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?

Código
  1. SELECT * FROM DATOS WHERE YEAR(FECHA) = YEAR(CURDATE())
  2. SELECT * FROM DATOS WHERE YEAR(FECHA) = 2011

funcionarian exactamente igual :p

Código
  1. SELECT * FROM DATOS WHERE MONTH(FECHA) = MONTH(CURDATE())
  2. SELECT * FROM DATOS WHERE MONTH(FECHA) = 3
  3. ELECT * FROM DATOS WHERE MONTHNAME(FECHA) = 'March'

para marzo xD


« Última modificación: 10 Marzo 2011, 05:57 am por Nakp » En línea

Ojo por ojo, y el mundo acabará ciego.
Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: [mysql] Consultar mediante rango de fechas en una sola sentencias ?
« Respuesta #12 en: 10 Marzo 2011, 05:57 am »

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)

Código
  1. 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?

Código
  1. SELECT * FROM DATOS WHERE YEAR(FECHA) = YEAR(CURDATE())
  2. SELECT * FROM DATOS WHERE YEAR(FECHA) = 2011

funcionarian exactamente igual :p

Código
  1. SELECT * FROM DATOS WHERE MONTH(FECHA) = MONTH(CURDATE())
  2. SELECT * FROM DATOS WHERE MONTH(FECHA) = 3
  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:

Código
  1. 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 Desconectado

Mensajes: 6.336

he vuelto :)


Ver Perfil WWW
Re: [mysql] Consultar mediante rango de fechas en una sola sentencias ?
« Respuesta #13 en: 10 Marzo 2011, 06:06 am »

time() es un timestamp en formato unix... cambia por

Código
  1. mysql_query( "inser into DATOS( ID, MENSAJE, FECHA ) values('123', 'abc', NOW());", $link);
  2.  
  3. //o
  4.  
  5. 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 Desconectado

Mensajes: 6.336

he vuelto :)


Ver Perfil WWW
Re: [mysql] Consultar mediante rango de fechas en una sola sentencias ?
« Respuesta #14 en: 10 Marzo 2011, 07:14 am »

La siguiente consulta selecciona todos los registros con un valor date_col dentro de los últimos 30 días:
Código
  1. mysql> SELECT something FROM tbl_name
  2.    -> 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.
Nakp
casi es
Ex-Staff
*
Desconectado Desconectado

Mensajes: 6.336

he vuelto :)


Ver Perfil WWW
Re: [mysql] Consultar mediante rango de fechas en una sola sentencias ?
« Respuesta #15 en: 10 Marzo 2011, 16:14 pm »

jeje despues de pensar un rato puedes seleccionar todas las fechas del mismo mes y año pasando el año y mes concatenados :P para marzo 2011 seria 201103 por lo tanto la query quedaria mas o menos asi

Código
  1. SELECT * FROM DATOS WHERE EXTRACT(YEAR_MONTH FROM FECHA) = 201103;
  2.  
  3. SELECT * FROM DATOS WHERE YEAR(FECHA) = 2011 AND MONTH(FECHA) = 3;

funcionarina exactamente igual para el mismo mes (del mismo año) :P
En línea

Ojo por ojo, y el mundo acabará ciego.
Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: [mysql] Consultar mediante rango de fechas en una sola sentencias ?
« Respuesta #16 en: 10 Marzo 2011, 17:57 pm »

time() es un timestamp en formato unix... cambia por

Código
  1. mysql_query( "inser into DATOS( ID, MENSAJE, FECHA ) values('123', 'abc', NOW());", $link);
  2.  
  3. //o
  4.  
  5. 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

Quiero tener en el campo FECHA la disponibilidad de Fecha y Hora, que funcion utilizo ???... NOW() o CURDATE() ?...

Por cierto, la insercion (ya en la realidad) la utilizo mediante una funcion llamada insertar_bdd() pasandole 2 argumentos, el primer argumento es el nombre de la base de datos y el segun argumento es un array donde esta los campos y su valor... Como podria hacer el cambio a la forma de usar NOW() o CURDATE() ?

Asi lo hago ahorita, como lo haria ahora ???

Código
  1. <?php
  2. $trama= array(
  3.     "id"=>"'123'",
  4.     "mensaje"=>"'abc'",
  5.     "fecha"=>"'". time(). "'" );
  6.  
  7. if( !insertar_bdd( "DATOS", $trama ) )
  8.     echo 'Error...';
  9. else     echo 'Exito...';
  10. ?>



Aprovecho para hacer otra observacion... Como actualmente todas mis fechas de las tablas que uso, las guardo usando el tiempo de unix ( time() ) y la variable FECHA es un VARCHAR(100) not NULL... Digamos que sustituyo a FECHA DATE not NULL, pero ahora como se guardaran los datos ?? Ya que actualmente cuando muestro una fecha, despues de hacer la consultar y extraer el campo de FECHA (usando mysql_fetch_array()), imprimo los datos asi:

Código
  1. <?php
  2. $cons= consultar......
  3. $buf= mysql_fetch_array($cons);
  4. echo 'Fecha: '. date( "d/m/Y", $buf["FECHA"] );
  5. echo '<br>Horario: '. date( "g:i a", $buf["FECHA"] );
  6. ?>

Como seria cuando se cambie a FECHA DATE not NULL ?

Cabe mencionar que quiero preguntar antes de hacer pruebas, ya que mi sistema esta ya algo cargado de datos y no quiero experimentar con este, por seguridad y porque no quiero cometer alguna torpesa y da~ar mis registros :D.

Saludos !
En línea

Nakp
casi es
Ex-Staff
*
Desconectado Desconectado

Mensajes: 6.336

he vuelto :)


Ver Perfil WWW
Re: [mysql] Consultar mediante rango de fechas en una sola sentencias ?
« Respuesta #17 en: 10 Marzo 2011, 20:31 pm »

el problema es que guardas un unix timestamp (el cual.. no es varchar, bastaria con un campo numeric o decimal en la base de datos) dependiendo que necesites guardar, en tu base de datos ese campo deberia ser DATE o DATETIME (fecha o fecha y hora)

time() devuelve fecha Y hora en formato unix... pero si no usaras la hora talvez prefieras usar date("Y-m-d") para guardar solo la fecha (y el campo de tipo DATE en la base de datos)

si necesitas la fecha Y hora deberias usar DATETIME en tu base de datos y date("Y-m-d H:m:s") para insertar el timestamp en la base de datos (todo esto del lado de php, las  funciones comentadas anteriormente CURDATE() y NOW() son de SQL)

en resumen xD tendrias que dejar de usar time() y cambiar la forma en que se guardan las fechas en la base de datos, lo cual es una buena practica tomando en cuenta que el tiempo unix empieza el 1 de enero de 1970 a las 0:00 :) imagina si tu sistema guardara fechas de nacimiento :P mi padre no podria registrarse xD
En línea

Ojo por ojo, y el mundo acabará ciego.
Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: [mysql] Consultar mediante rango de fechas en una sola sentencias ?
« Respuesta #18 en: 10 Marzo 2011, 21:36 pm »

Corrígeme si es necesario....

Entonces seria cambiar el FECHA VARCHAR(100) not NULL, a FECHA DATETIME not NULL.
Despues cambiar el script asi:
Código
  1. <?php
  2. $trama= array(
  3.     "id"=>"'123'",
  4.     "mensaje"=>"'abc'",
  5.     "fecha"=>"'". date( "Y-m-d H:m:s", time()). "'" );
  6. ?>

Ya con eso, seria convinar las funciones NOW() y CURDATE() (ambas de SQL) para las busquedas segun los lapsos que deseo !.

Pero respecto ya a la practica de bsuqueda, no importa que quiera buscar en FECHA por ejemplo la fecha: 2011-01-01, asumiendo que el campo tiene el formato Y-m-d H:m:s, el MySQL excluira los valores H:m:s para hacer la busqueda con lo que concuerde con 2011-01-01 ?

Saludos !
« Última modificación: 10 Marzo 2011, 21:38 pm por Diabliyo » En línea

Nakp
casi es
Ex-Staff
*
Desconectado Desconectado

Mensajes: 6.336

he vuelto :)


Ver Perfil WWW
Re: [mysql] Consultar mediante rango de fechas en una sola sentencias ?
« Respuesta #19 en: 10 Marzo 2011, 22:27 pm »

no es necesario pasar el segundo parametro a date (quita ese time())

despues para buscar por lapsos de tiempo puedes usar esto

y por ultimo, si... si buscas solo con la fecha mysql obvia la hora ;)
En línea

Ojo por ojo, y el mundo acabará ciego.
Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Ayuda] consultar registros entre fechas
Programación Visual Basic
NeoXero 1 2,027 Último mensaje 16 Mayo 2008, 12:01 pm
por Hans el Topo
Error al consultar mediante un DataGridView
.NET (C#, VB.NET, ASP)
Diana.Net 2 3,013 Último mensaje 30 Diciembre 2011, 16:01 pm
por Diana.Net
Como obtener rango de fechas con JAVA
Java
Skarlo 0 4,127 Último mensaje 17 Junio 2013, 14:59 pm
por Skarlo
Rango de fechas a partir del dia de la semana mysql
Bases de Datos
cchianalino 4 5,119 Último mensaje 27 Septiembre 2018, 06:45 am
por cchianalino
Rango de Fechas
Programación General
Cayoma 2 6,389 Último mensaje 1 Junio 2023, 19:42 pm
por Cayoma
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines