将3个表中的数据收集到1个查询中

时间:2012-07-12 22:21:17

标签: mysql

我的MySQL数据库中有三个不同的表。

表用户:(id,score,name)
表团队:(id,title)
table team_Members:(team_id,user_id)

我想要做的是让1个查询找到给定用户ID所属的每个团队ID,以及以下信息:

  1. 该团队中的成员总数
  2. 团队名称
  3. 用户在团队中排名(基于得分)
  4. 编辑:

    所需的输出应如下所示;

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

    查询应基​​于用户ID。

    非常感谢帮助

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;