PHP MySQL Query, самый популярный за последние 24 часа
-
15-09-2020 - |
Вопрос
Допустим, я хочу получить десять записей, набравших НАИБОЛЬШЕЕ лайков за последние 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 | идентификатор
даты указаны в стандартном времени ISO — пример 2010-07-14T00:35:31-04:00.Прямо из справочника PHP:дата("с");
Решение
WHERE date_created > DATE_SUB( NOW(), INTERVAL 24 HOUR)
. Другие советы
Если ваше поле Date_created является типом поля DateTime или Timestamp, вы можете использовать Date_sub в вашем пункте, где следует следующим образом;
WHERE date_created > DATE_SUB(NOW(), INTERVAL 24 HOUR)
. Поэтому сначала date_created должен быть определен как временная метка с включенным 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
Я оставлю то, что делать, в качестве упражнения для читателя, если только вы не скажете «пожалуйста» и не захотите, чтобы я дал точный синтаксис.
Вы должны использовать функции даты / времени, а не.
WHERE date_created >= (NOW() - INTERVAL 24 HOUR)
.