2013-09-27 43 views
0

所以我有以下查询,它提取组织内的主动竞争,并尝试获取领先竞争对手的用户。运行在另一个SQL查询的循环中的SQL查询?

目前查询获取正确积极的比赛,并为每个用户的totalPoints。现在抓住所有的用户,我只希望它抢顶级用户,所以我假设的解决之道在于GROUP BY查询,某种LIMIT的?

在此图像中,你可以看到我得到的结果。正如你所看到的,每次比赛我都会得到每个用户,我只需要每个比赛的顶级用户。

http://i.imgur.com/5OXen4e.png

对我怎么能解决这个任何想法?

SELECT c.competitionId, c.name, c.start_date, c.end_date, a.userid, u.name, u.profilePic , 

SUM(activity_weight) AS totalPoints 

FROM activity_entries a INNER JOIN users1 u ON u.id = a.userid INNER JOIN competitions c ON c.competitionId = a.competitionId 

WHERE c.organisationId = 1 AND c.start_date < now() AND c.end_date > now() 
GROUP BY a.userid, c.competitionId ORDER BY c.id DESC 
+1

提供表结构plz –

+0

select * from table inner join(select * from table2)as temp_table2 on temp_table2.id = table.id – AdrianBR

+0

正如@Nadeem_MK所示,如果您需要更详细的帮助,请考虑提供适当的DDL和/或共同的sqlfiddle与期望的结果 – Strawberry

回答

0

还有一个更好的办法。只需运行一个查询并加入比赛表。您发布的第二个查询显示您知道如何连接表。

+0

正确,我知道如何加入表格,但我有点困惑它是否会正确循环?我会放弃它,谢谢! – user2656127

+0

另外,如果我从第一个查询中获得这些信息,那么如何在第二个查询中定义competitionId?哼! – user2656127

+0

使用单个查询,也没有必要循环。至于你的第二个评论,competitionId是你用来加入比赛表的领域。如果您需要它,请将其包含在您的select子句中。 –