重新的標題:如何在MySQL中根據點讚數和時間相關性對表格進行排序?
P粉771233336
P粉771233336 2023-09-09 09:22:12
0
1
570

我有一個簡單的問題,有兩個mysql表,一個儲存照片,另一個儲存讚。結構如下:

表 `photos` - id, name, image_id
表 `likes` - id_photos, timestamp

現在按照按讚數對照片進行排序並取得前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中進行額外的處理?

P粉771233336
P粉771233336

全部回覆(1)
P粉958986070

考慮一個情況,即 likestimestamp 是 UNIXTIME 字段,因此如果我們使用 SUM(timestamp) 而不是計算新的 likes 數量,將會給予更多的權重:

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;
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!