Pergunta

Digamos que eu queira obter dez registros com MAIS curtidas nas últimas 24 horas.Aqui está o que tenho até agora:

$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";

O problema com isso é que ele só recebe os mais curtidos a partir DAQUELE DIA, não importa quão longe esteja esse dia.Não é o mais curtido das últimas 24 horas.

estrutura para curtidas: de | para | date_created | id

as datas estão no horário ISO padrão - exemplo 2010-07-14T00:35:31-04:00.Vem direto da referência do PHP:data("c");

Foi útil?

Solução

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

Outras dicas

Se o seu campo date_created for do tipo datetime ou timestamp, você poderá usar DATE_SUB em sua cláusula where da seguinte maneira;


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

Portanto, first off date_created deve ser definido como um carimbo de data/hora com on default current timestamp.Se você também tiver um date_modified na tabela, então date_modified teria on update current timestamp e você pode definir a data de criação como carimbo de data e hora e esse gatilho para atualizá-lo

CREATE TRIGGER likes_date_entered
BEFORE INSERT ON likes
FOR EACH ROW SET NEW.date_created = NOW()

Agora que temos um carimbo de data/hora, você pode facilmente aplicar algumas das funções de data do MySQL à coluna.

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

Deixarei o que fazer como exercício para o leitor, a menos que você diga por favor e queira que eu forneça a sintaxe exata.

Você deveria usar funções de data/hora, em vez de LIKE.

WHERE date_created >= (NOW() - INTERVAL 24 HOUR)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top