2017-01-28 3 views
0

Это может быть просто для некоторых, но я не могу это решить.Написание комплекса MySQL Присоединиться к запросу

У меня есть 3 таблицы:

Команды, пользователей, теги

Teams     Users    Tags 
------------------- ------------------ ----------------------- 
userID | teamUserID userID | username userID | name | value 
------------------- ------------------ ----------------------- 
1  | 2   1  | dan  2  | myTag | 1 
1  | 3   2  | bob  2  | aTag | 2 
1  | 4   3  | jon  3  | bTag | 1 
         4  | rob  4  | cTag | 5 

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

Мне нужен запрос, который предоставит список пользователей в любой команде с общим количеством тегов, которые у них есть.

Так что, когда я прошу результатов от команды 1 (команда Дана) он должен вернуть это:

----------------------------------- 
userID | username | tagTotalValue 
----------------------------------- 
2  | bob  | 3 
3  | jon  | 1 
4  | rob  | 5 

У меня есть этот запрос до сих пор, но это только дает мне одну запись с общей общей для всей команды , а не список всех пользователей в команде отдельно с их итогами.

SELECT username, SUM(value) tagTotalValue 
FROM users u LEFT JOIN tags t 
ON u.userID = t.userID 
WHERE u.userID IN (SELECT teamUserID FROM teams WHERE userID = 1) 

Помощь!

Если кто-нибудь может объяснить хороший способ разработки способов создания этих запросов, я был бы очень благодарен за это. Мне просто нужно сделать курс mySQL, или есть простой метод, который я могу использовать?

+0

Ваша модель данных не имеет смысла. Почему «команды» имеют два идентификатора пользователя? –

+0

userID является владельцем команды, а teamUserID являются идентификаторами пользователей. Я ценю, что именование может быть немного запутанным. – Dan

ответ

2

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

Это, похоже, мало связано с запросом, который вы написали. Вы должны начать с объединения трех таблиц и затем объединения. Запрос выглядит примерно так:

SELECT t.teamId, u.userId, u.username, count(ta.userId) as numTags 
FROM teams t JOIN 
    users u 
    ON t.teamUserID = u.UserId LEFT JOIN 
    tags ta 
    ON u.userID = ta.userID 
WHERE t.teamId = @teamId -- this can be removed 
GROUP BY t.teamId, u.userId, u.username; 

Этот запрос делает прыжок, что teams имеет столбец, который идентифицирует команду - скажем teamId.

+0

Спасибо, Гордон, я очень ценю ваш совет. с несколькими настройками, это работает отлично. – Dan

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