2012-07-12 57 views
3

我在我的MySQL數據庫中有三個不同的表。從3個表中收集數據到1個查詢

表用戶(ID,得分,名稱)
表隊:(ID,標題)
表team_Members:(TEAM_ID,USER_ID)

我想這樣做是有1個查詢用於查找每個團隊ID給定的用戶ID是構件,具有以下信息一起:

  1. 總數量的成員在該組
  2. 團隊的名字
  3. 個用戶小組(根據分數)中的排名

編輯:

所需的輸出應該是這樣的;

TITLE (of the group)  NUM_MEMBERS  RANK 
------------------------------------------------ 
Foo bar team    5     2 
Another great group  34    17 
. 
. 
. 

該查詢應該基於用戶ID。

幫助是極大的讚賞

+0

您可以編輯您的問題提供一些樣本數據和你會從數據等的輸出? – 2012-07-12 22:29:50

+0

您將有一個BIG查詢:P – PhD 2012-07-12 22:42:28

回答

1

我覺得這個查詢應該讓你要求什麼

select t.id, t.title, count(m.user_id) members, (
    select count(1) 
    from users u3 
    inner join team_Members m3 on u3.id = m3.user_id 
    and m3.team_id = t.id and u3.score > (
     select score from users where name = 'Johan' 
    ) 
) + 1 score 
from teams t 
inner join team_Members m on t.id = m.team_id 
where t.id in (
    select team_id 
    from team_Members m2 
    inner join users u2 on m2.user_id = u2.id 
    where u2.name = 'Johan' 
) 
group by t.id, t.title 
+0

請注意,名稱分爲兩個地方;),otherwize我認爲查詢會更加複雜。 – 2012-07-12 23:01:49

+0

這幾乎是我在找的東西。感謝您在創造全新選擇領域的靈感! – 2012-07-13 08:00:43

0

要收集,你只需要使用JOIN

SELECT 
    u.*, t.*, tm.* 
FROM 
    users u 
JOIN 
    team_Members tm ON u.id = tm.user_id 
JOIN 
    teams t ON t.id = tm.team_id; 

要獲得總覺得團隊使用COUNT數的一些組密鑰

有些像

SELECT 
    COUNT(t.id), u.*, t.*, tm.* 
FROM 
    users u 
JOIN 
    team_Members tm ON u.id = tm.user_id 
JOIN 
    teams t ON t.id = tm.team_id GROUP BY t.id; 

而且僅排名:

SELECT 
    COUNT(t.id) as number_of_members, u.*, t.*, tm.* 
FROM 
    users u 
JOIN 
    team_Members tm ON u.id = tm.user_id 
JOIN 
    teams t ON t.id = tm.team_id 
GROUP BY t.id 
ORDER BY u.score; 
+0

在SQL中放入某種換行符以避免令人討厭的水平滾動並使您的答案更易於閱讀,這裏沒有任何處罰。 :-)我們真的很感激它。謝謝。 – 2012-07-12 23:08:05

+0

你是對的,謝謝你的編輯 – GTSouza 2012-07-12 23:09:49