#mysql
#mysql
Вопрос:
У меня есть запрос, который получает список игр:
SELECT
1 (SELECT count(*) from games a WHERE a.score > g.score) as rank,
score, p.leaderboard_initials, p.operating_system, IF(p.picture_code = 0, p.picture_url, p.picture_code) AS picture_code
FROM games g
inner join players p on (p.google_id = g.google_id)
where p.leaderboard_initials LIKE CONCAT('%', 'db3sq', '%')
ORDER BY score DESC
LIMIT 0, 100;
Есть два игрока с одинаковыми инициалами таблицы лидеров, ‘db3sq’:
Мне нужно вернуть, в случае ‘db3sq’, две строки, показывающие наивысший балл для каждого игрока. Следующий запрос получает только первую строку:
set @rank=0;
select (@rank:=@rank 1) rank , max(score) score, leaderboard_initials, operating_system, picture_code
from (
SELECT
1 (SELECT count(*)
from games a WHERE a.score > g.score) as rank,
score, p.leaderboard_initials, p.operating_system, IF(p.picture_code = 0, p.picture_url, p.picture_code) AS picture_code
FROM games g
inner join players p on (p.google_id = g.google_id)
where p.leaderboard_initials LIKE CONCAT('%', 'db3sq', '%')
ORDER BY score DESC
) t
group by leaderboard_initials
order by score DESC
LIMIT 0, 100;
Когда я меняю count(*)
на count(DISTINCT p.google_id)
, я получаю ошибку Subquery returns more than 1 row
. Я чувствую, что должен group_concat
как-то использовать. Как я могу получить две строки, показывающие максимальный результат для каждого игрока?
РЕДАКТИРОВАТЬ: Вам, вероятно, также нужно знать, что players
имеет primary key
google_id
то, что является foreign key
in games
.
Комментарии:
1. Определен ли уникальный ключ для каждого пользователя или вы можете объединить два поля для создания одного?
2. @DagSondreHansen отредактировал вопрос. Спасибо
3. Я бы попробовал создать набор данных, используя уникальные ключи (вместо имен пользователей). Используйте этот запрос в качестве источника данных FROM, а затем разрешите имена пользователей.
4. @DagSondreHansen Прав. На самом деле это имеет смысл. Сейчас я иду на работу, но я мог бы попробовать этот подход вечером. Приветствия.