rango - Seleccione registros de hoy, esta semana, este mes php mysql
obtener fecha actual php mysql (10)
Bueno, esta solución te ayudará a seleccionar solo el mes actual, la semana actual y solo hoy
SELECT * FROM games WHERE games.published_gm = 1 AND YEAR(addedon_gm) = YEAR(NOW()) AND MONTH(addedon_gm) = MONTH(NOW()) AND DAY(addedon_gm) = DAY(NOW()) ORDER BY addedon_gm DESC;
Para publicaciones agregadas semanales:
WEEKOFYEAR(addedon_gm) = WEEKOFYEAR(NOW())
Para publicaciones agregadas mensuales:
MONTH(addedon_gm) = MONTH(NOW())
Para las publicaciones agregadas anuales:
YEAR(addedon_gm) = YEAR(NOW())
obtendrás resultados precisos donde solo se muestran los juegos que se agregaron hoy; de lo contrario, puedes mostrar: "No se encontraron nuevos juegos para hoy". El uso del conjunto de registros ShowIF es una transacción vacía.
Me imagino que esto es bastante simple, pero no puedo entenderlo. Estoy tratando de hacer algunas páginas, una que contendrá los resultados seleccionados de la tabla de mi base de datos mysql para hoy, esta semana y este mes. Las fechas se ingresan cuando el registro se crea con la date(''Ymd H:i:s'');
. Esto es lo que tengo hasta ahora:
día donde fecha> (fecha- (60 * 60 * 24))
"SELECT * FROM jokes WHERE date>(date-(60*60*24)) ORDER BY score DESC"
semana donde fecha> (fecha- (60 * 60 * 24 * 7))
"SELECT * FROM jokes WHERE date>(date-(60*60*24*7)) ORDER BY score DESC"
mes (30 días) donde fecha> (fecha- (60 * 60 * 24 * 30))
"SELECT * FROM jokes WHERE date>(date-(60*60*24*30)) ORDER BY score DESC"
Cualquier idea será altamente apreciada. ¡Gracias!
Creo que usar la función NOW()
es incorrecto para obtener la diferencia horaria. Porque NOW()
funciona cada vez que estás calculando las últimas 24 horas. Debe usar CURDATE()
lugar.
function your_function($time, $your_date) {
if ($time == ''today'') {
$timeSQL = '' Date($your_date)= CURDATE()'';
}
if ($time == ''week'') {
$timeSQL = '' YEARWEEK($your_date)= YEARWEEK(CURDATE())'';
}
if ($time == ''month'') {
$timeSQL = '' Year($your_date)=Year(CURDATE()) AND Month(`your_date`)= Month(CURDATE())'';
}
$Sql = "SELECT * FROM jokes WHERE ".$timeSQL
return $Result = $this->db->query($Sql)->result_array();
}
Intente usar las funciones de fecha y hora (MES (), AÑO (), DÍA (), Manual de MySQL )
Esta semana:
SELECT * FROM jokes WHERE WEEKOFYEAR(date)=WEEKOFYEAR(NOW());
La semana pasada:
SELECT * FROM jokes WHERE WEEKOFYEAR(date)=WEEKOFYEAR(NOW())-1;
La respuesta de Nathan es muy cercana, pero devolverá un conjunto de resultados flotante. A medida que el tiempo cambia, los registros flotan desde y hacia el conjunto de resultados. El uso de la función DATE()
en NOW()
quitará el elemento de tiempo de la fecha creando un conjunto de resultados estático. Dado que la función date()
se aplica now()
lugar de la columna de date
real, el rendimiento debería ser mayor ya que aplicar una función como date()
a una columna de fecha inhibe la capacidad de MySql para usar un índice.
Para mantener el resultado del conjunto de uso estático:
SELECT * FROM jokes WHERE date > DATE_SUB(DATE(NOW()), INTERVAL 1 DAY)
ORDER BY score DESC;
SELECT * FROM jokes WHERE date > DATE_SUB(DATE(NOW()), INTERVAL 1 WEEK)
ORDER BY score DESC;
SELECT * FROM jokes WHERE date > DATE_SUB(DATE(NOW()), INTERVAL 1 MONTH)
ORDER BY score DESC;
La respuesta de Nathan te dará chistes de las últimas 24, 168 y 744 horas, NO las bromas de hoy, esta semana, este mes. Si eso es lo que quieres, genial, pero creo que podrías estar buscando algo diferente.
Usando su código, al mediodía, los chistes comenzarán ayer al mediodía y terminarán hoy al mediodía. Si realmente quieres las bromas de hoy, intenta lo siguiente:
SELECT * FROM jokes WHERE date >= CURRENT_DATE() ORDER BY score DESC;
Tendría que hacer algo un poco diferente de la semana, el mes, etc. actuales, pero ya entendió la idea.
Mes actual:
SELECT * FROM jokes WHERE YEAR(date) = YEAR(NOW()) AND MONTH(date)=MONTH(NOW());
Semana actual:
SELECT * FROM jokes WHERE WEEKOFYEAR(date) = WEEKOFYEAR(NOW());
Día actual:
SELECT * FROM jokes WHERE YEAR(date) = YEAR(NOW()) AND MONTH(date) = MONTH(NOW()) AND DAY(date) = DAY(NOW());
Esto seleccionará solo el mes actual, realmente la semana y realmente solo hoy :-)
Para obtener los datos de la semana pasada en MySQL. Esto funciona para mí incluso a través de los límites anuales.
select * from orders_order where YEARWEEK(my_date_field)= YEARWEEK(DATE_SUB(CURRENT_DATE(), INTERVAL 1 WEEK));
Para obtener los datos de la semana actual
select * from orders_order where YEARWEEK(date_sold)= YEARWEEK(CURRENT_DATE());
Suponiendo que su columna de fecha es una columna de fecha MySQL real:
SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 DAY) ORDER BY score DESC;
SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 WEEK) ORDER BY score DESC;
SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 MONTH) ORDER BY score DESC;
Todos parecen referirse a que la fecha es una columna en la tabla.
No creo que esta sea una buena práctica. La palabra "fecha" podría ser una palabra clave en algún lenguaje de codificación (tal vez Oracle) así que por favor cambie la fecha del nombre de columna a tal vez JDate.
Entonces, lo siguiente funcionará mejor:
SELECT * FROM jokes WHERE JDate >= CURRENT_DATE() ORDER BY JScore DESC;
Entonces tenemos una tabla llamada Jokes con las columnas JScore y JDate.
Una mejor solución para "hoy" es:
SELECT * FROM jokes WHERE DATE(date) = DATE(NOW())