2011-10-06 34 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位頂級球員。它顯示許多重複用戶的高分。 –