PHP MySQL Query самый популярный за последние 24 часа - PullRequest
9 голосов
/ 14 июля 2010

Скажем, я хочу получить десять записей с САМЫМИ лайками за последние 24 часа.Вот что у меня есть:

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

Проблема с этим заключается в том, что он получает только то, что ему нравится больше всего в тот день, независимо от того, как далеко он в этот день.За последние 24 часа он не получил наибольшего внимания.

структура лайков: от |к |date_created |id

даты указаны в стандартном времени ISO - пример 2010-07-14T00: 35: 31-04: 00.Приходите прямо из ссылки на PHP: date ("c");

Ответы [ 4 ]

20 голосов
/ 14 июля 2010
WHERE date_created > DATE_SUB( NOW(), INTERVAL 24 HOUR)
2 голосов
/ 14 июля 2010

Если ваше поле date_created имеет тип поля datetime или timestamp, вы можете использовать DATE_SUB в предложении where следующим образом:


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

1 голос
/ 14 июля 2010

Таким образом, дата первого создания должна быть определена как метка времени с default current timestamp.Если у вас в таблице также есть date_modified, тогда date_modified будет иметь on update current timestamp, и вы можете определить дату, созданную как отметку времени, и этот триггер для ее обновления

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

Теперь, когда у нас есть отметка времени, вы можетелегко применить некоторые функции даты MySQL к столбцу.

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

Я оставлю то, что нужно сделать в качестве упражнения для читателя, если только вы не скажете «пожалуйста» и не хотите, чтобы я дал точный синтаксис.

1 голос
/ 14 июля 2010

Вы должны использовать функции даты / времени вместо LIKE.

WHERE date_created >= (NOW() - INTERVAL 24 HOUR)
...