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);
?>
What da faq!
Porque no lo haces directamente en la consulta del MySQL. Es decir,
SELECT *
FROM DATOS
WHERE (fecha = 'fecha-actual');
Cita de: Shell Root en 10 Marzo 2011, 04:30 AM
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 !
Pero es que no entiendo, explicanos con ejemplos reales.
Cita de: Shell Root en 10 Marzo 2011, 04:43 AM
Pero es que no entiendo, explicanos con ejemplos reales.
Es por demas, lee el ejemplo...
Cual? ahhahaa
Cita de: Shell Root en 10 Marzo 2011, 05:06 AM
Cual? ahhahaa
Pues el que esta en el primer post :S daaaaaaaa !
Con ejemplos reales, me refiero a los datos que están la base de datos. Y explicando lo que quieres extraer... ¬¬!
Cita de: Shell Root en 10 Marzo 2011, 05:14 AM
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 !
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
Cita de: Shell Root en 10 Marzo 2011, 05:30 AM
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 !
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
Cita de: Nakp 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)
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 !
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
Cita de: Shell Root en 10 Marzo 2011, 05:30 AM
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
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
SELECT * FROM DATOS WHERE EXTRACT(YEAR_MONTH FROM FECHA) = 201103;
SELECT * FROM DATOS WHERE YEAR(FECHA) = 2011 AND MONTH(FECHA) = 3;
funcionarina exactamente igual para el mismo mes (del mismo año) :P
Cita de: Nakp en 10 Marzo 2011, 06:06 AM
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
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 ???
<?php
$trama= array(
"id"=>"'123'",
"mensaje"=>"'abc'",
"fecha"=>"'". time(). "'" );
if( !insertar_bdd( "DATOS", $trama ) )
echo 'Error...';
else echo 'Exito...';
?>
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:
<?php
$cons= consultar......
$buf= mysql_fetch_array($cons);
echo 'Fecha: '. date( "d/m/Y", $buf["FECHA"] );
echo '<br>Horario: '. date( "g:i a", $buf["FECHA"] );
?>
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 !
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
Corrígeme si es necesario....
Entonces seria cambiar el FECHA VARCHAR(100) not NULL, a FECHA DATETIME not NULL.
Despues cambiar el script asi:
<?php
$trama= array(
"id"=>"'123'",
"mensaje"=>"'abc'",
"fecha"=>"'". date( "Y-m-d H:m:s", time()). "'" );
?>
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 !
no es necesario pasar el segundo parametro a date (quita ese time())
despues para buscar por lapsos de tiempo puedes usar esto (https://foro.elhacker.net/php/mysql_consultar_mediante_rango_de_fechas_en_una_sola_sentencias-t321474.0.html;msg1589546#msg1589546)
y por ultimo, si... si buscas solo con la fecha mysql obvia la hora ;)
Cita de: Nakp en 10 Marzo 2011, 22:27 PM
no es necesario pasar el segundo parametro a date (quita ese time())
Entonces como se pasa la fecha ?
date("Y-m-d H:m:s") devuelve la fecha y hora actual :) el segundo es solo para darle formato a otra hora, seria redundante pasarle time()
Cita de: Nakp en 10 Marzo 2011, 22:53 PM
date("Y-m-d H:m:s") devuelve la fecha y hora actual :) el segundo es solo para darle formato a otra hora, seria redundante pasarle time()
echo, deja hago los cambios y pongo
AQUI cualquier otro problema con las fechas, sirve que no se pierde el hilo xD