2010-07-14 18 views
9

Digamos que quiero obtener diez registros con MÁS gustos en las últimas 24 horas. Esto es lo que tengo hasta ahora:PHP MySQL Query más popular en las últimas 24 horas

$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 esto es que sólo se pone más le gusta de ese día, no importa lo lejos en ese día es. No es el que más me gusta de las últimas 24 horas.

estructura para lo que gusta: de | a | date_created | id

las fechas están en el tiempo estándar ISO - ejemplo 2010-07-14T00: 35: 31-04: 00. Ven directamente de la referencia PHP: fecha ("c");

+0

mi tipo de datos es VARCHAR, lo que hago ahora ... – Bharanikumar

Respuesta

21
WHERE date_created > DATE_SUB(NOW(), INTERVAL 24 HOUR) 
+1

1 - Maldita sea, puede escribir más rápido que yo :( –

+0

Gracias por el cumplido –

+0

@Dave Rix Bienvenido a stackoverflow :) –

1

Debe utilizar funciones de fecha/hora, en lugar de LIKE.

WHERE date_created >= (NOW() - INTERVAL 24 HOUR) 
+0

NECESARIO SER> NO < –

+0

@haim evgi Sí, noté ese error después de enviar la respuesta. :) –

+0

buena respuesta, pero hay un problema: debemos procesar el tiempo en php no mysql –

1

Así que primero fuera DATE_CREATED deberían definirse como una marca de tiempo con el default current timestamp. Si usted tiene un DATE_MODIFIED en la tabla, así entonces DATE_MODIFIED tendría on update current timestamp y se puede definida con fecha de creación como una marca de tiempo y 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 puede aplicar fácilmente algunos de la fecha mysql funciona en la columna.

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

Dejaré qué hacer como ejercicio para el lector, a menos que se diga satisface bastante y quiere que le dé la sintaxis exacta.

+0

Las condiciones de George o Hami funcionarán una vez que cambie el tipo de datos. – umassthrower

+0

ya sabes, mi respuesta es mejor :-P Cálculo de la marca de tiempo en PHP es una mala idea: "las fechas están en la hora estándar de ISO - ejemplo 2010-07-14T00: 35: 31-04: 00. Viene directamente de la referencia de PHP: fecha ("c"); " – umassthrower

2

Si su campo date_created es un tipo de campo datetime o timestamp, puede usar DATE_SUB en su cláusula where de la siguiente manera;

 

WHERE date_created > DATE_SUB(NOW(), INTERVAL 24 HOUR) 
 
Cuestiones relacionadas