Yo lo que aria seria un algoritmo de puntuaciones en base a 2 parámetros fijos, para luego ordenar por esa puntuación.
Me explico, supongamos que tienes estos datos en una tabla llamada publicaciones:
fecha_publicacion (datetime) | hashtag
en la cual vas registrando en que fecha, hora, minuto y segundo se publica un hashtag, esa tabla es a modo de historial y va creciendo y creciendo a medida que pasan los dias.
Ahora bien, el algoritmo de puntuacion deberia recibir 2 parametros:
inicio - Cantidad de dias desde los cuales quieres marcar tendencia, pueden ser 7 para la ultima semana, 30 para el ultimo mes, etc.
intervalo - Este parametro es la cantidad de minutos que te interesa tomar para calcular el puntaje, si pones 1, todos los hastag del mismo minuto tienen la misma puntuacion, si pones 10, todos los que esten en un rango de 10 minutos tienen la misma puntuacion, si pones 60 todos los de la ultima hora tienen la misma puntuacion, etc.
Entonces, que es lo que debe hacer el algoritmo con esa puntuacion?
1) Calcular las fecha de inicio - fin del rango, la de fin es la fecha actual, la de inicio, es la fecha actual menos la cantidad de dias pasados como parametro.
2) Calcular la cantidad de sub-rangos, esto se obtiene dividiendo la cantidad de minutos entre la fecha de inicio y fin por el parametro intervalo
3) Debe crear una tabal de puntuaciones por hashtag, luego, empieza a recorrer los hashtag del rango inicio fin estimado haciendo lo siguiente:
Código PHP:
Ver original$inicio // Contiene la fecha de inicio calculada previamente
$intervalo // Contiene la cantidad de minutos definida previamente
$cant_intervalos // Contiene la cantidad de sub-rangos calculada previamente
$puntuaciones = array(); // Array con las puntuaciones del hashtag while($hashtag = getHashtag()) // Recorrer de a uno en uno los registros.
{
$intervalo_actual = ceil(minutos_diff
(hashtag
["fecha_publicacion"], $inicio) / $intervalo); // Intervalo en el que esta. $puntuaciones[$hashtag["hashtag"]] += ($cant_intervalos/$intervalo_actual);
}
Luego ordenas a $puntuaciones y las de valor mas alto son las que tienen mas tendecia o son mas populares.
La idea es que los mensajes nuevos pesan mas que los viejos, pero si hubo un hashtag hace un mes que tubo mucha repercucion, este no desaparece de la noche a la mañana sino que va bajando posiciones en el ranking