如何根据相对于时间的点赞数在 mysql 中排序 table?
How to order table in mysql by likes relative to their time?
我有一个简单的问题,2 个 mysql 表,一个放照片,另一个放点赞。结构是这样的:
table `photos` - id, name, image_id
table `likes` - id_photos, timestamp
现在按喜欢排序照片并获得 TOP 3 是微不足道的:
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;
但我想补充的是时间相关性,意思是,较新的喜欢有更多的“重量”,即使有些照片可能有更多的喜欢,但它们更旧,并且它们的顺序低于喜欢较少但较新的照片.
是否可以只在MySQL中解决这个问题?或者在 PHP ?
中进行额外处理
让我们考虑案例然后 likes
。timestamp
是 UNIXTIME 字段,所以如果我们使用 SUM(timestamp) 而不是计数,新的湖泊将有更多的权重:
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;
可以使用一些系数(例如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;
我有一个简单的问题,2 个 mysql 表,一个放照片,另一个放点赞。结构是这样的:
table `photos` - id, name, image_id
table `likes` - id_photos, timestamp
现在按喜欢排序照片并获得 TOP 3 是微不足道的:
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;
但我想补充的是时间相关性,意思是,较新的喜欢有更多的“重量”,即使有些照片可能有更多的喜欢,但它们更旧,并且它们的顺序低于喜欢较少但较新的照片.
是否可以只在MySQL中解决这个问题?或者在 PHP ?
中进行额外处理让我们考虑案例然后 likes
。timestamp
是 UNIXTIME 字段,所以如果我们使用 SUM(timestamp) 而不是计数,新的湖泊将有更多的权重:
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;
可以使用一些系数(例如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;