2015-10-12 6 views
3

J'ai une table appelée log que les grumes a récemment utilisé des éléments les colonnes sont les suivantes:MYSQL Trending Recherche

  • u_id (un numéro unique)
  • item_id (un numéro d'identification de l'article)
  • access_time (un horodatage de serveur)

Je voudrais créer une requête qui trouve la tendance des éléments les plus consultés sur une période de temps. Par exemple, quels sont les 10 éléments les plus consultés au cours des 60 dernières minutes (heure du serveur).

Comment puis-je créer une telle requête?

Répondre

1
SELECT item_id, COUNT(*) FROM log 
WHERE TIMESTAMPDIFF(MINUTE, access_time, NOW()) <= 60 
GROUP BY item_id 
ORDER BY COUNT(item_id) DESC 
LIMIT 0,10 
1

Je compte juste les éléments les éléments accessibles dans la dernière heure, commande par le nombre d'accès, et de prendre le top 10:

SELECT item_id, COUNT(*) 
FROM  log 
WHERE access_time >= DATE_SUB(CURDATE(), INTERVAL 1 HOUR) 
GROUP BY item_id 
ORDER BY 2 DESC 
LIMIT 10