2012-07-12 60 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