2013-05-05 5 views
0

У меня есть таблица с пользователями и таблица с событиями, связанными с идентификатором из таблицы Users. В каждом событии вы можете создавать точки, и я хочу получить общее количество баллов от конкретного пользователя.Вычислить сумму из двух таблиц для конкретного пользователя

Это выглядит следующим образом:

Users 
+----+----------+ 
| id | username | 
+----+----------+ 

Events 

+----------+---------+--------+ 
| event_id | user_id | points | 
+----------+---------+--------+ 

// event_id относится к таблице событий с конкретными данными о событии. но это не имеет значения.

Лучшим может быть получение данных от пользователя и общее количество баллов, полученных в одном запросе.

Спасибо и привет, Mottenmann

+0

Возможно, вы могли бы изменить свой заголовок на что-то вроде «рассчитать сумму из двух таблиц для конкретного пользователя» или что-то в этом роде. (Текущее название вводит в заблуждение) – bestprogrammerintheworld

ответ

1

«..разработать получить данные от пользователя и общее количество очков, которые он получил в одном запросе.»

Вам нужно зарегистрироваться обе таблицы сначала, чтобы вы могли манипулировать данными. В нижеследующем запросе используется INNER JOIN, который включает только пользователей в список результатов, если он имеет по крайней мере одну соответствующую запись на Events. Если вы хотите, чтобы все пользователи даже без одной подходящей записи в другой таблице, используйте вместо этого LEFT JOIN.

SELECT a.ID, a.username, SUM(b.points) totalPoints 
FROM Users a 
     INNER JOIN Events b 
      ON a.ID = b.user_ID 
GROUP BY a.ID, a.username 

Для дальнейшего получить больше знаний о присоединяется, любезно перейдите по ссылке ниже:

+0

Спасибо за ваш быстрый ответ, другой вопрос, который я получил, это если вы можете выбрать все тотальные очки каждого пользователя, а затем получить упорядоченное по их значению, а затем получить позицию конкретного пользователя? – Mottenmann

+0

@downvoter у вас есть так много шансов уменьшить мои ответы. ясно ':)' счастливый downvoting. –

1

«В каждом событии вы можете сделать очки и я хочу, чтобы получить общее количество баллов от конкретного пользователя. "

Вы могли бы сделать что-то вроде этого:

select sum(e.points) as points from users u 
left join events e ON (u.id = e.user_id) 
WHERE u.id = {$id} 

где {$id} это идентификатор пользователя.

Смежные вопросы