КАК ВЫБРАТЬ ОТЛИЧИЕ от одного поля и других полей из таблицы INNER JOIN - PullRequest
1 голос
/ 06 октября 2011

Я использую PHP и MySQL, и у меня есть 2 таблицы:

  • оценка таблицы: есть поля 'user_id' и 'score'
  • таблица user: есть поля 'user_id' и'user_name'

Люди играют в игру, затем сохраняют user_id и выставляют счет в таблице «Score» каждый раз, когда игра заканчивается.В таблице есть много строк для одного пользователя.

Что я хочу?Я хочу выбрать топ-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

В чем здесь ошибка?

Ответы [ 2 ]

2 голосов
/ 06 октября 2011

это работает? (не проверено)

    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 голосов
/ 06 октября 2011

Следующий 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
...