2011-07-03 53 views
0

我有一個論壇。我想執行一個SQL查詢,這樣我就可以獲得博客提交數量最多的用戶。我有2個表,blogsusers獲得最多的ID號

blogs表具有author_id這是從usersuser_id表。

所以這是我試圖做的,但沒有成功:

SELECT b.author_id FROM blogs b 
INNER JOIN users u ON b.author_id = u.user_id 
ORDER BY count(author_id) DESC 
GROUP BY b.author_id 
LIMIT 0,10; 

能否請你幫我找到大多數博客提交的用戶,或者換句話說,我需要找到一個author_id有在blogs表中最常出現。謝謝!

+0

基本上,您的查詢中的語法有點不對:GROUP BY應該在ORDER BY之前,就像您在所有答案中看到的一樣。 –

+0

這是劈頭髮,我知道...但它是一個論壇,還是一個博客?這兩個概念是非常不同的。 – Flimzy

+0

@Filmzy如果你問我的網站,它的論壇。而不是博客我可能應該使用單詞「主題」,但那只是一個偏好。 – Nazar

回答

2

你並不需要加入到users這一點,你只需要一個GROUP BY和LIMIT:

SELECT author_id 
FROM blogs 
GROUP BY author_id 
ORDER BY COUNT(*) DESC 
LIMIT 1 

的GROUP BY告訴哪些團體應該算COUNT;在這種情況下,它應該收集每個author_id的博客並將這些博客統計爲一個組。

+0

謝謝,這似乎是工作。我們有5000多個用戶,這就是爲什麼我說我不是100%確定。但它看起來是正確的:) – Nazar

+0

@Nazar:你可以刪除'LIMIT'並使用'SELECT author_id,COUNT(*)'來查看所有計數。 –

0
SELECT COUNT(a.*) AS total, a.author_id 
FROM blogs AS a 
GROUP BY author_id 
ORDER BY total DESC 
LIMIT 1 
0

查詢的不同部分按錯誤順序排列。這應該工作

SELECT b.author_id 
FROM blogs b 
INNER JOIN users u ON b.author_id = u.user_id 
GROUP BY b.author_id 
ORDER BY COUNT(b.author_id) DESC 
LIMIT 0 , 10 

請參閱關於SELECT Syntax的MySQL文檔。

此外,我假設你的例子有點簡化,因爲正如其他人指出的那樣,在這種情況下真的不需要連接。

+0

是的,我的確是簡化了。我不知道正確的方法,因此試圖使用連接表。謝謝你的建議! – Nazar