2010-12-27 8 views
18

Para la siguiente consulta, ¿cómo puedo contar el número de filas donde datesent tiene menos de 24 horas de antigüedad? (El campo datesent es una marca de tiempo).Recuento de filas donde una marca de tiempo tiene menos de 24 horas de antigüedad

Gracias de antemano,

John

$message = "SELECT datesent, recipient 
       FROM privatemessage 
       WHERE recipient = '$u'"; 


    $messager = mysql_query($message); 

$messagearray = array(); 
+0

i eliminado la etiqueta 'css' ya que no tenía nada que ver con la cuestión. –

Respuesta

5

Puede utilizar la función DATE_SUB. Reste un día de la fecha actual en la cláusula where.

Algo así como

DATE_SUB(NOW(), INTERVAL 1 DAY) 

EDIT: cambiado CURTIME() a NOW()

+0

'CURTIME' solo devuelve la hora, no la fecha y la hora. –

+0

CURTIME simplemente devuelve la hora actual, nada que ver con la fecha actual. En su lugar, desearía pasar NOW(). – TehShrike

3
$message="select count(1) 
from privatemessage 
where datesent>=date_sub(now(), 24 hours) 
and recipient='$u'" 

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add

+0

Esto devolverá un recuento de cada fila, porque está comparando que el valor existente es mayor o igual al mismo valor, después de restar 24 horas de ello ... Realizar una función en una columna en la tabla también significa un índice, si uno existió, no se pudo usar para la operación. –

+0

Tienes razón. Lo siento, no uso MySQL, así que no tuve la oportunidad de probar la solución antes de publicarla. –

+1

La unidad es HOUR (singular), no HORAS. Consulte el enlace que ya proporcionó: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add –

48

Uso:

SELECT COUNT(*) AS cnt 
    FROM PRIVATEMESSAGE pm 
WHERE pm.datesent >= DATE_SUB(NOW(), INTERVAL 1 DAY) 
+0

Esta es la única respuesta que pasa el valor correcto en el primer parámetro de DATE_SUB – TehShrike

+0

Gracias ... esto parece prometedor. Pero estoy teniendo problemas en realidad haciendo eco del resultado para ver si funciona. ¿Cómo podría hacerme eco del total? – John

+0

@John: actualicé para definir un alias de columna: el "cnt" es lo que harías referencia en PHP para obtener el valor de la columna. –

0

Veo esto es una vieja uno aunque para cualquiera que llegue aquí a través de una búsqueda en línea más adelante, me gustaría aclarar que la pregunta es acerca de una marca de tiempo, no de fecha y hora. Necesitaba un conteo basado en la marca de tiempo. Una solución fácil es convertir el datetime a unix_timestamp. Probado con MySQL 5,7

SELECT COUNT(*) AS cnt 
FROM PRIVATEMESSAGE pm 
WHERE pm.datesent >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY)) 
Cuestiones relacionadas