2009-09-19 7 views
1

J'ai seulement deux variables à travailler avec ici, l'âge (horodatage unix) et les hits. Je me demande s'il y a une solution dans MySQL pour calculer et ordonner par la popularité de quelque chose. L'algorithme devrait reconnaître que les nouveaux éléments n'auront pas nécessairement autant de succès que les anciens, mais qu'ils sont plus populaires.Est-il possible dans MySQL de commander quelque chose par popularité avec un horodatage et le nombre de résultats?

Est-ce possible comme je l'imagine?

+1

Vous voulez dire en moyenne "Hotness" normalisé au fil du temps? – random

+0

Je suppose que c'est ce que j'essaie de dire. Je n'aurais pas dû utiliser "popularité". – Sam152

+1

popularité et hotness pourrait être la même chose. – random

Répondre

2

Vous devez trouver votre propre méthode de pondération des hits et de l'âge pour calculer la popularité. Vous pouvez sélectionner cette fonction en tant que popularité, puis commander à ce sujet. Les commandes d'exemple simples suivantes sur le taux de succès quotidien de la page.

SELECT table.*, (table.hits/TIMESTAMPDIFF(DAY, NOW(), FROM_UNIXTIME(table.created))) AS popularity 
FROM table 
... 
ORDER BY popularity DESC 
+0

Cela fonctionne très bien, merci. Maintenant, les choses qui reçoivent beaucoup de trafic sur de courtes périodes commencent à rivaliser avec d'autres contenus qui sont beaucoup plus anciens. – Sam152

+1

Gardez à l'esprit que MySQL ne peut pas utiliser un index pour accélérer votre clause ORDER BY. Afaik MySQL ne supporte pas les index basés sur les fonctions et donc votre requête se terminera toujours dans un scan de table complet. – VolkerK

+0

Absolument correct. Merci de l'avoir signalé. Je suppose qu'une solution est d'avoir la popularité comme un champ dans le tableau, mis à jour régulièrement par un processus d'arrière-plan. – Zed

Questions connexes