select
users.*,
group_concat(badges.id, '=', badges.title separator ';') as badges_info
from users
left join badges_data on badges_data.user_id=users.id
inner join badges on badges.id=badges_data.badge_id
group by users.id
limit 100;
Вышеприведенное вернет данные типа
user.*,
badges_id=title;badges_id=title; ...
Если вы считаете, что формат, возвращаемый group_concat, трудно читать / анализировать
select
users.*,
badges.*
from users
left join badges_data on badges_data.user_id=users.id
inner join badges on badges.id=badges_data.badge_id
, это вернет несколько строк длятот же пользователь, если у пользователя несколько значков