Mysql запрос возвращает повторяющиеся строки при объединении таблиц - PullRequest
2 голосов
/ 19 февраля 2020

У меня есть таблица, в которой хранится user_avatar filepath:

id | userid | file         | last_update |
1  | 23     | myphoto.png  | x_timestamp |
2  | 23     | myphoto2.png | x_timestamp |
3  | 25     | myavatar.png | x_timestamp |

У меня есть таблица, которая возвращает user_score:

id | gamerid | score | last_update |
1  | 23      | 44    | x_timestamp |
2  | 25      | 99    | x_timestamp |

Это запрос, который я использую для отображения оценок пользователей с их avatar

SELECT * FROM user_score us LEFT JOIN user_avatar ua ON us.gamerid=ua.userid 

Приведенный выше запрос вернет 2 повторяющихся строки для пользователя 23, поскольку он загрузил 2 разные фотографии в таблицу user_avatar. Прямо сейчас он выводит так:

GAMER SCORES RESULTS
myphoto.png  | 44
myphoto2.png | 44
myavatar.png | 99

В действительности, для каждого пользователя должна быть возвращена только одна строка, и последний загруженный аватар должен использоваться в качестве основного аватара. Как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

Вы можете попробовать ниже -

SELECT * FROM user_score us LEFT JOIN user_avatar ua ON us.gamerid=ua.userid 
and ua.last_update = 
   (select max(last_update) from user_avatar ua1 where ua.userid=ua1.userid)
0 голосов
/ 19 февраля 2020

Вы должны выбрать значение для самого последнего аватара .. вероятно, связанного с максимальным идентификатором для user_id

SELECT ua.*, us.* 
FROM user_score us 
INNER JOIN  (
  select user_id, max(id) max_id 
  from user_avatar
) t on t.user_id = us.user_id
LEFT JOIN user_avatar ua 
  ON us.gamerid=ua.u serid 
    AND t.max_id  = ua.id 

В действительности, последний аватар загрузился

...