2014-12-07 2 views
1

Когда пользователь нажимает на ссылку, новые данные в следующем формате хранятся в таблице MySQL_DB называется tracking_table:Извлечь из MySQL «самые щелевые элементы за последние 6 часов»?

id url     title    clicktime 
1  http://1.com  title 1  2014-12-07 21:33:53 
2  http://2.com  title 2  2014-12-07 21:34:03 
3  http://1.com  title 1  2014-12-07 19:30:00 
4  http://3.com  title 3  2014-12-07 18:38:47 
5  http://1.com  title 1  2014-12-07 22:23:54 
6  http://2.com  title 2  2014-12-07 20:17:20 
7  http://7.com  title 7  2014-12-07 10:20:12 
8  http://1.com  title 1  2014-12-07 21:38:03 

Как я могу отобразить (в PHP) в порядке убывания топ-5 названий, которые были за последние 6 часов? Учитывая данные, записанные до сих пор (если предположить, что сейчас 2014-12-07 22.24.00), мой результат должен выглядеть следующим образом:

#  url    no. of clicks title 
1  http://1.com  4   title 1 
2  http://2.com  2   title 2 
3  http://3.com  1   title 3 

Я создал БД с помощью этой команды:

CREATE TABLE `tracking_table` (
    id int(11) unsigned NOT NULL AUTO_INCREMENT, 
    url varchar(255) DEFAULT NULL, 
    title varchar(255) DEFAULT NULL, 
    clicktime timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (id) 
); 

Любая помощь будет высоко оценена!

ответ

1

Вы должны сгруппировать клики по url и title, сосчитать их, а затем использовать пункт limit получить только верх 5:

SELECT url, title, COUNT(*) 
FROM  tracking_table 
WHERE DATE_DIFF (NOW(), clicktime) * 24 <= 6 
GROUP BY url, title 
ORDER BY 3 DESC 
LIMIT 5 
0

Я хотел бы предложить следующее:

select tt.title, count(*) 
from tracking_table tt 
where clicktime >= date_sub(now(), interval - 6 hours) 
group by title 
order by count(*) desc 
limit 5; 

Этот похож на ответ Мейника, с одним важным исключением: статья where. Во-первых, этот расчет должен работать, а второй clicktime не является аргументом функции. Последнее означает, что будет использоваться индекс на clicktime. (В определении таблицы нет ни одного, но это может быть хорошей идеей для этого типа запросов.)

Смежные вопросы