2010-07-14 3 views
9

Скажите, что я хочу получить десять записей с самыми любимыми за последние 24 часа. Вот то, что я до сих пор:PHP MySQL Самый популярный пользователь за последние 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»);

+0

мой тип данных VARCHAR, что я делаю сейчас ... – Bharanikumar

ответ

21
WHERE date_created > DATE_SUB(NOW(), INTERVAL 24 HOUR) 
+1

+1 - Черт, вы можете печатать быстрее, чем меня :( –

+0

Спасибо за комплимент –

+0

Рикс @ Dave Добро пожаловать в StackOverflow :) –

1

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

WHERE date_created >= (NOW() - INTERVAL 24 HOUR) 
+0

НУЖНО БЫТЬ> НЕ < –

+0

@haim evgi Да, я заметил эту ошибку после того, как я отправил ответ. :) –

+0

хороший ответ, но есть одна проблема: мы должны обработать время в php, а не mysql –

1

Так первый от 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 date относится к столбцу.

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

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

+0

Условия Джорджа или Хами будут работать после изменения типа данных. – umassthrower

+0

вы знаете, мой ответ лучше: -P Вычисление временной метки в PHP - это плохая идея: «даты соответствуют стандарту ISO времени - пример 2010-07-14T00: 35: 31-04: 00. Приходите прямо из ссылки PHP: дата ("с");» – umassthrower

2

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

 

WHERE date_created > DATE_SUB(NOW(), INTERVAL 24 HOUR) 
 
Смежные вопросы