Consulta PHP MySQL mais popular nas últimas 24 horas
-
15-09-2020 - |
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");
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)