2016-04-04 2 views
0

Я создаю сайт, как социальная сеть. У меня есть 3 стола. Я нахожу каждого пользователя и их количество друзей и количество друзей, которые заблокированы.Как написать вложенный запрос Подключение трех таблиц?

1. tbl_Registrations 

    | Id | FirstName | 
    ************************* 
     1  User1 
     2  User2 
     3  User3 
     4  User4 
     5  User5 
     6  User6 
     7  User7 
     8  User8 


    2.tbl_Friends 

    | Id | SenderId | ReciverId | Status | 

     1   1    2   Accept 
     2   3    1   Accept 
     3   4    1   Accept 
     4   2    3   Accept 
     5   3    8   Accept 
     6   4    2   Accept 
     7   4    3   Accept 
     8   8    4   Accept 

    3. tbl_Status 

    | Id | UserId | Status | 

     1   1   Blocked 
     2   3   Blocked 
     3   4   Allowed 
     4   2   Blocked 
     5   6   Blocked 
     6   5   Allowed 
     7   8   Blocked 
     8   7   Allowed 

мой запрос

SELECT tbl_Registrations.FirstName, COUNT(*) AS TotalFriends 
FROM tbl_Friends INNER JOIN tbl_Registrations ON tbl_Friends.SenderId = tbl_Registrations.Id 
OR tbl_Friends.ReciverId = tbl_Registrations.Id 
WHERE (tbl_Friends.Status = 'Accept') 
GROUP BY tbl_Registrations.FirstName 

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

мой ожидаются выход

| FirstName | TotalFriendsCount | BlockedFriendsCount | 
+0

вашего tbl_Status не имеет смысла для меня, как вы знаете, Идентификатор_пользователь 1 заблокирован? Он заблокирован кем? – Veljko89

+0

Заблокирован администратором. Я занимаюсь администратором. В админке я перечисляю список пользователей, а их друзья подсчитывают и блокируют друзей count @ Veljko89 – Ritz

+0

Итак, вы хотите сказать tbl_Friends.Status может быть «заблокирован»? Я просто не могу понять, в каком столбце отображается BlockedFriends. – Veljko89

ответ

0

Попробуйте

SELECT tbl_Registrations.FirstName, 
     COUNT(*) AS TotalFriends, 
     ( SELECT COUNT(*) FROM tbl_Status 
      WHERE [Status] = 'Blocked' 
       AND (UserId = tbl_Friends.SenderId 
        OR UserId = tbl_Friends.ReciverId) 
       AND UserId <> tbl_Registrations.id) BlockedFriendsCount 
FROM tbl_Friends 
INNER JOIN tbl_Registrations ON tbl_Friends.SenderId = tbl_Registrations.Id 
    OR tbl_Friends.ReciverId = tbl_Registrations.Id 
WHERE (tbl_Friends.Status = 'Accept') 
GROUP BY tbl_Registrations.FirstName 
+0

Я получаю сообщение об ошибке: Столбец tbl_Friends.SenderId недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в группе по clause.Column tbl_Friends.ReciverId недействителен в списке выбора потому что он не содержится ни в агрегатной функции, ни в группе group. Столбец tbl_Registrations.Id недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в группе по предложению. @ Abdul Rasheed – Ritz

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