Tengo un problema simple, 2 tablas mysql, una tiene fotos y la otra le gusta. La estructura es así:
table `photos` - id, name, image_id table `likes` - id_photos, timestampAhora es trivial ordenar las fotos por sus gustos y obtener TOP 3 como este:
SELECT photos.* , COUNT(likes.id) AS likes_count FROM photos LEFT JOIN likes ON photos.id = likes.id_photos GROUP BY photos.id ORDER BY likes_count DESC LIMIT 3;Pero lo que quiero agregar es la relatividad del tiempo, lo que significa que los me gusta más nuevos tienen más "peso" y aunque algunas fotos pueden tener más me gusta, son más antiguas y se ordenan más bajo que las fotos con menos me gusta pero más nuevas.
¿Es posible resolver este problema solo en MySQL? ¿O con procesamiento adicional en PHP?
Consideremos el caso y luego likes . la timestamp de tiempo es un campo UNIXTIME, por lo que si usamos SUM (marca de tiempo) en lugar de contar, los nuevos lagos tendrán más peso:
SELECT photos.* , COUNT(likes.id) AS likes_count , SUM(likes.timestamp) AS likes_weight FROM photos LEFT JOIN likes ON photos.id = likes.id_photos GROUP BY photos.id ORDER BY likes_weight DESC LIMIT 3;Es posible usar algún coeficiente (por ejemplo, UNIX_TIMESTAMP())
SELECT photos.* , COUNT(likes.id) AS likes_count , SUM(likes.timestamp)/UNIX_TIMESTAMP() AS likes_weight FROM photos LEFT JOIN likes ON photos.id = likes.id_photos GROUP BY photos.id ORDER BY likes_weight DESC LIMIT 3;