2011-12-20 112 views
1

我有一個tbl_user,其中包含有關用戶的信息,我有一個tbl_article,其中包含物品+的tbl_user家長通過孩子的表

我們有父子關係的ID的數量排序,因爲每用戶可能有很多文章,這就是爲什麼我在文章表中包含user_id的原因。

我想列出有大多數文章的10個用戶......我找遍雖然我無法找到它......我想過這個問題,可是沒有用,我不擅長SQL查詢。

預先感謝您

+2

什麼是RDBMS你在用嗎?如果第10名有一個平局會怎麼樣? – 2011-12-20 19:58:51

+0

我只是使用mySQL的PHP​​ ...這是關於一個web項目 – SmootQ 2011-12-20 20:07:15

回答

3
SELECT TOP(10) 
    tbl_user.id, 
    COUNT(tbl_article.user_id) 
FROM 
    tbl_user 
LEFT JOIN 
    tbl_article 
    ON tbl_user.id = tbl_article.user_id 
GROUP BY 
    tbl_user.id 
ORDER BY 
    COUNT(tbl_article.user_id) DESC 
LIMIT 
    10 

取決於哪個RDBMS你使用,你可能需要TOP(10)LIMIT 10,等我同時這樣你就可以看到,但只能使用所使用RDBMS的一個;)

+0

謝謝你的朋友... +1,我已經得到它的工作,如果只有一個選項可以選擇兩個最佳答案;) – SmootQ 2011-12-20 20:12:30

+0

@SimoTAQI - Awwwwww,我有'LIMIT'版本第一;)你得到了你雖然需要,但這是很重要的。不是我的虛榮心。或者需要外部讚譽和理由。我的存在不依賴於StackOverflow中的投票和點。 *** ***哭 – MatBailie 2011-12-20 20:16:42

+0

HHHHH,然後我就檢查了第一次談話,你之間有兩個:-) 好,最佳答案:-) – SmootQ 2011-12-20 20:19:02

2
SELECT TOP 10 
    UserID, COUNT(Article) 
FROM tbl_User u 
INNER JOIN tbl_Article a 
    ON a.Userid = u.userid 
GROUP BY userid 
ORDER BY COUNT(article) DESC 

所有你需要的是一個GROUP BYJOIN

如果沒有爲用戶提供要包括0文章的潛力,你應該使用LEFT JOIN

選項還COUNT(DISTINCT Article)如果有關於重複的關注即可。

+0

非常感謝朋友... +1,我會試試這個:-) – SmootQ 2011-12-20 20:01:11

+1

如果前10名之一有0篇文章,這贏得了' t包括它;) – MatBailie 2011-12-20 20:02:06

+1

如果他們有0篇文章,那麼他們不應該被包括在內,我猜測,因爲與其他所有沒有文章的用戶將會有無限的聯繫。 – JNK 2011-12-20 20:03:49