Вопрос

Допустим, я хочу получить десять записей, набравших НАИБОЛЬШЕЕ лайков за последние 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)
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top