2017-04-06 97 views
-1

我在我的應用程序中做了前十名的排名,而且我被困在SQL查詢中,我將用它來做這件事。 我有2張桌子。 'posts'表中存儲了帖子創作者(user_id)的ID和帖子內容(當然還有條目ID)。排名SQL查詢

+----+---------+--------------+ 
| ID | user_id | content | 
+----+---------+--------------+ 
| 1 |  3 | Lorem Ipsum1 | 
| 2 |  6 | Lorem Ipsum2 | 
| 3 |  3 | Lorem Ipsum3 | 
+----+---------+--------------+ 

的「喜歡」表,誰喜歡的職位(USER_ID)的人的店鋪ID,後ID(POST_ID)等日期女巫是一個時間戳(like_date)。

+----+---------+---------+------------+ 
| ID | user_id | post_id | like_date | 
+----+---------+---------+------------+ 
| 1 |  2 |  1 | 1491484851 | 
| 2 |  5 |  1 | 1491484871 | 
| 3 |  11 |  2 | 1491484891 | 
+----+---------+---------+------------+ 

每當用戶喜歡帖子,在'喜歡'表創建一個條目,並且如果用戶不同,我只是刪除條目。 這是交易。我想抓住過去30天中最受歡迎的10位用戶。我想查詢結果是這樣的

+---------+-------+ 
| user_id | likes | 
+---------+-------+ 
|  3 |  2 | 
|  6 |  1 | 
+---------+-------+ 

我已經試過噸查詢,並花了幾個小時試圖解決這個問題,但我只是無法弄清楚如何。

+1

首先,顯示你的努力。然後,你寫出「前10名最喜歡的帖子」,但你的示例輸出顯示「user_id」......你想要哪一個? –

+0

對不起。我的意思是「用戶」。 –

+1

你到目前爲止提出了什麼? – blackandorangecat

回答

0

假設你的意思是在你的預期結果「POST_ID」而不是「USER_ID」:最近

SELECT post_id, count(*) as 'likes' 
FROM likes 
GROUP BY post_id 
WHERE like_date >= DATE(NOW() - INTERVAL 30 DAY) 
ORDER By 2 desc 
LIMIT 10 

一切都在喜歡錶,所以過濾柱(WHERE)由計數,返回/秩序和ONL檢索前10行。還有其他的方法來實現這一目標?

+0

是的,我想我只需要得到這個結果並按照帖子的作者總結 –

+0

在這種情況下,Stefano的釘了它.. –

0

這一個應該做的伎倆

select user_id, count(*) 
from posts t1 
join likes t2 
on  t1.ID = t2.post_id 
where from_unixtime(t2.like_date) >= now() - interval 30 day 
group by user_id 
order by count(*) desc 
limit 10 
0

你甚至都不需要這樣的join

SELECT user_id, count(*) as numlikes 
FROM likes l 
WHERE like_date >= unix_timestamp() - 30*24*60*60 
GROUP BY user_id 
ORDER BY numlikes desc 
LIMIT 10; 

like_date看起來像Unix時間戳,所以我們應該把它作爲一個。這從當前時間到第二個整整30天。如果你想從午夜到數天:

WHERE like_date >= unix_timestamp(CURDATE() - interval 30 day) 

編輯:

如果從職位的user_id,那麼你可以使用join來獲取:

SELECT p.user_id, count(*) as numlikes 
FROM likes l join 
    posts p 
    on l.post_id = p.id 
WHERE l.like_date >= unix_timestamp() - 30*24*60*60 
GROUP BY p.user_id 
ORDER BY numlikes desc 
LIMIT 10; 
+0

這會帶來用戶給出的喜歡的總數,不會? 我在尋找用戶在那段時間收到的喜歡總數 –