PHP MySQL Consulta más popular en las últimas 24 horas
-
15-09-2020 - |
Pregunta
Supongamos que queremos obtener diez discos MÁS le gusta en las últimas 24 horas.He aquí lo que tengo hasta ahora:
$date = date("o-m-d");
$query = "SELECT date_created,COUNT(to),from,to FROM likes WHERE date_created LIKE '$date%' GROUP BY to ORDER BY COUNT(to) DESC LIMIT 10";
El problema con el que es que sólo se pone el que más le gustaba de ESE DÍA, no importa lo lejos que día es.Que no se ponga el que más le gustaba de las últimas 24 horas.
estructura para gustos: de | a | date_created | id
las fechas están en la norma ISO tiempo - ejemplo 2010-07-14T00:35:31-04:00.Vienen directamente desde el PHP de referencia:fecha("c");
Solución
WHERE date_created > DATE_SUB( NOW(), INTERVAL 24 HOUR)
Otros consejos
Si su campo Date_Created es un tipo de campo DateTime o Timestamp, puede usar Date_sub en su cláusula donde sigue;
WHERE date_created > DATE_SUB(NOW(), INTERVAL 24 HOUR)
Así que en primer lugar date_created debe ser definido como una marca de tiempo con default current timestamp
.Si usted tiene un date_modified en la tabla y, a continuación, date_modified habría on update current timestamp
y se puede definir con la fecha de creación como una marca de tiempo y de este disparador para actualizarlo
CREATE TRIGGER likes_date_entered
BEFORE INSERT ON likes
FOR EACH ROW SET NEW.date_created = NOW()
Ahora que tenemos una marca de tiempo se pueden aplicar fácilmente a algunos de los de mysql funciones de fecha para la columna.
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html
Voy a dejar lo que debe hacer como un ejercicio para el lector, a menos que usted dice bastante por favor y me quiere dar a conocer la sintaxis exacta.
Debe estar usando funciones de fecha / hora, en lugar de similares.
WHERE date_created >= (NOW() - INTERVAL 24 HOUR)