2011-10-06 37 views
1

我使用PHP和MySQL和我 有2个表:如何SELECT DISTINCT一个领域和其他方面的INNER JOIN表

  • 表得分:有场“USER_ID”和“分数”
  • 表用户:有字段'user_id'和'user_name'

人们玩游戏,然后在每次游戏结束时将user_id和分数存储在表'分数'中。表格分数中的单个用户有很多行。

我想要什么? 我想选择具有不同user_name的前10位玩家在列表中显示,那么正确的sql是什么?下面的代码现在是我的当前的SQL,但它不显示我想要的结果。

SELECT DISTINCT * FROM score as t1 
    INNER JOIN user AS t2 ON t1.user_id=t2.user_id 
    WHERE score>0 
    ORDER BY t1.score DESC 
    LIMIT 10 

这是什么错误?

+0

从肯特的改性正确的代码
选择USER_NAME,最大值(评分)作为maxscore 从得分,用户 其中score.user_id = user.user_id和评分> 0 组由USER_NAME 为了通过maxscore递减 \t \t \t \t \t LIMIT 10 –

回答

2

能完成这项工作? (未测试)

select username, max(score) as maxscore 
from score, user 
where score.userid=user.userid and score>0 
group by username 
order by maxscore desc 
+0

好吧,我在我的本地做了一个小测试,它给出了正确的东西... – Kent

+0

我明白了,谢谢肯特。 –

0

下面的sql将返回排名前10的最高得分玩家,他们的最高分数(不是前10分,而是前10名玩家)排序。

SELECT 
    u.user_name, 
    max(s.score) 
FROM 
    score as s 
    INNER JOIN [user] AS u 
     ON s.user_id = u.user_id 
WHERE 
    score > 0 
GROUP BY 
    u.user_name 
ORDER BY 
    2 DESC 
LIMIT 10 
+0

遗憾的是,我想不同的前10选手 –

+0

为什么支架viper34j? –

+0

即使删除[]结果依然不是10位顶级球员。它显示许多重复用户的高分。 –