它,如果你想擁有與上市最喜歡的對象,或者你是否正在尋找具有分佈在其所有的內容最全面喜歡的用戶的用戶目前尚不清楚。
考慮一個用戶只有一張擁有1000個喜歡的照片,如果該用戶在總共100張照片,用戶總數爲100張照片,視頻和帖子的平均喜歡數爲20的用戶之前列出, 50?
這些是兩個不同的查詢。
現在,我將假設你想要找到的是「最喜歡的」項目,然後找出哪些用戶是由哪些用戶創建/創作的。要找到20個「最喜歡」的項目,這是非常簡單的尋找一種「obj_id
」 S擁有最喜歡...
SELECT l.obj_id
, COUNT(1) AS like_count
FROM likes_service.likes l
GROUP BY l.obj_id
ORDER BY like_count DESC
LIMIT 0,20
我假設(基於原始查詢),並沒有一個明確的方案和樣本數據,likes
表中的obj_id
的值引用其他表中的單個對象的值id
...即,obj_id
值不會出現在photos
和videos
表中。 (否則,你可能有一列的地方旁邊obj_id
告訴你obj_id
被引用的表。)
我們使用以前的查詢作爲內嵌視圖(MySQL調用它派生表),並給它一個方便的「ml」別名(最喜歡),我們將對每個目標對象表(照片,視頻,帖子)進行左連接,找出它是什麼類型的項目,以及誰是用戶/創作者/作者是。
SELECT ml.obj_id
, ml.like_count
, p.user_id
, v.creator_id
, t.author_id
FROM (SELECT l.obj_id
, COUNT(1) AS like_count
FROM likes_service.likes l
GROUP BY l.obj_id
ORDER BY like_count DESC
LIMIT 0,20
) ml
LEFT
JOIN prod.pictures p
ON p.id = ml.obj_id
LEFT
JOIN prod.videos v
ON v.id = ml.obj_id
LEFT
JOIN prod.videos v
ON v.id = ml.obj_id
LEFT
JOIN prod.posts t
ON t.id = ml.obj_id
ORDER BY ml.like_count DESC
假設從照片表user_id
列是NOT NULL,且creator_id from the
videos`表NOT NULL ...
然後你就可以判斷obj_id在發現哪個表。即如果user_id
列不爲空,則您知道它來自照片表格,如果creator_id
不爲空,則您從視頻表格中知道它。
你可以添加在一些表情最外層選擇破譯......
SELECT CASE WHEN p.user_id IS NOT NULL THEN 'photo'
WHEN v.creator_id IS NOT NULL THEN 'video'
WHEN t.author_ID IS NOT NULL THEN 'post'
END AS obj_type
, CASE WHEN p.user_id IS NOT NULL THEN p.user_id
WHEN v.creator_id IS NOT NULL THEN v.creator_id
WHEN t.author_id IS NOT NULL THEN t.author_id
END AS user_id
, l.obj_id
爲什麼你的名字與同標號的三個不同的瓦爾? – Rubens
您不應該選擇不在您的聚合中的列。 – Kermit
@njk你是什麼意思? –