2014-03-13 65 views
0

我想獲得最後10位在主題中發表評論的用戶。需要獲取活動主題中的最後10個用戶

它沒有按預期工作。

SELECT DISTINCT 
p.author, a.name 
FROM posts p 
INNER JOIN users a 
ON a.id = p.author 
AND topicId = ? 
ORDER BY p.id 
DESC LIMIT 10' 


SELECT p.author, a.name 
FROM posts.p 
INNER JOIN users a 
ON a.id = p.author 
AND topicId = ? 
GROUP BY p.author 
ORDER BY p.id 
DESC LIMIT 10 

這是行不通的。我通過結合訂單來嘗試組合。但是這也行不通。任何建議?

結果與id索引不匹配。

帖子表的內容是這樣的:

POST 1 -> user 1 
POST 2 -> user 2 
POST 3 -> user 3 

結果:

2,1 etc. 

錯誤訂購。

回答

0

這應該讓你的前10名。

Select a.author, a.name 
from users a 
inner join (select top 10 id from posts group by id order by id desc) as posts 
on posts.id = a.author 
where topicID = ? 
+0

您的SQL語法錯誤;但這不是我所需要的。最後10個用戶向某個特定主題提交了帖子。 – user2429266

+0

我更新了答案。對不起,有一個語法錯誤。 – macm

0

如果我理解正確的話,我認爲這會做你想要什麼:

SELECT p.author, a.name 
FROM posts p INNER JOIN 
    users a 
    ON a.id = p.author AND topicId = ? 
GROUP BY p.author, a.name 
ORDER BY max(p.id) DESC 
LIMIT 10; 

此查詢之間的主要區別和你開頭顯式聚合。 order by然後使用max(p.id)進行排序。通過僅使用p.id,MySQL從匹配的行中選擇任意的id--並且可能是您的目的錯誤的行。

+0

這會返回最舊的海報嗎?^^ – user2429266

相關問題