Не знаю, правильно ли я понял проблему, но, может быть, что-то вроде:
SELECT u.id, u.name, u.lastname, SUM(ur.rate) AS rate
FROM users AS u
INNER JOIN users_rates AS ur ON ur.userid = u.id
WHERE ur.eventid = 31
GROUP BY u.id
edit : Если вы хотите получить список со всеми пользователями независимо от того, есть ли у них какие-либо ставки, вы также можете присоединиться к таблице users_participants
и заменить INNER JOIN
из users_rates
на LEFT JOIN
. Тогда предложение WHERE
должно ссылаться на events_participants
(больше не users_rates
, как могло бы быть NULL
):
SELECT u.id, u.name, u.lastname, SUM(ur.rate) AS rate
FROM users AS u
INNER JOIN events_participants AS ep ON ep.userid = u.id
LEFT JOIN users_rates AS ur ON ur.userid = u.id AND ur.eventid = ep.eventid
WHERE ep.eventid = 31
GROUP BY u.id