Mysql запросов проблема - PullRequest
       14

Mysql запросов проблема

0 голосов
/ 25 апреля 2011

В моей базе данных mysql есть 3 таблицы для запроса.

enter image description here

  • Users_rates (поля: id, userid, raterid, rate, eventid), содержащие все скорости (rate), которые были назначены пользователям (userid), участвующим в определенных событиях (eventid) ), другими пользователями (raterid)

  • Events_participants (поля: id, userid, eventid), содержащие всех пользователей (userid), участвующих в каждом событии (eventid)

  • Пользователи (поля: id, имя, фамилия), содержащие все относительные данные пользователя

Мне нужно запросить эти три таблицы, чтобы получить рейтинг конкретного события для ставок пользователей.

Ex. Джон, Эрик и Марк участвовали в "Eventid = 31". Джон получил 1 оценку от Марка и 2 от Эрика. Марк получил 1 оценку от Эрика. Никто не оценил Эрика, хотя.

Мне нужно получить для каждого имени пользователя, фамилии и суммы ставок, полученных за Eventid = 31

Я пытался с этим:

SELECT events_participants.userid,users.name,users.lastname,
(SELECT SUM(rate)FROM users_rates WHERE users_rates.eventid=31 AND users_rates.userid=events_participants.userid)AS rate 
FROM(( events_participants INNER JOIN users ON events_participants.userid=users.id)
LEFT OUTER JOIN users_rates ON events_participants.userid=users_rates.userid )
WHERE events_participants.eventid=31

Но я получаю:

userid | name | lastname | rate  

1 | luca | silvestro | 1 

3 | claudio | buricchi | 6

3 | claudio | buricchi | 6

Какой правильный запрос?

Спасибо

Лука

Ответы [ 2 ]

1 голос
/ 25 апреля 2011

Не знаю, правильно ли я понял проблему, но, может быть, что-то вроде:

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
1 голос
/ 25 апреля 2011

Попробуйте:

SELECT users.userid, users.name, users.lastname, temp.sum as rate
FROM users LEFT JOIN (
    SELECT userid, SUM(rate) as sum FROM users_rates WHERE eventid = 31 GROUP BY userid
) as temp USING (userid)

Может выдать ошибку, вместо этого может работать:

SELECT users.userid, users.name, users.lastname, temp.sum as rate
FROM users, (
    SELECT userid, SUM(rate) as sum FROM users_rates WHERE eventid = 31 GROUP BY userid
) as temp WHERE users.userid = temp.userid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...