2016-04-04 23 views
0

Sosyal ağ gibi bir site oluşturuyorum. 3 masam var. Her kullanıcıyı ve toplam arkadaş sayısını ve engellenen arkadaş sayısını buluyorum.Yuvalı Sorgu Nasıl Yazılır Üç tabloyu Bağlama?

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 

benim sorgu ben sadece adını ve toplam arkadaşlar alacak benim sorgu kullanarak

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 

olduğunu. Aynı sorguda engellenen Arkadaşların sayısını bulun.

benim beklenen çıkışı

| FirstName | TotalFriendsCount | BlockedFriendsCount | 
+0

sizin tbl_Status benim için mantıklı değil deneyin mi? Kim tarafından engellendi? – Veljko89

+0

Yönetici tarafından engellendi. Yönetici Bölümü yapıyorum. Yönetici tarafında ben kullanıcı listesi listeleme ve arkadaşları saymak ve bloke arkadaşlar saymak @ Veljko89 – Ritz

+0

Yani tbl_Friends.Status 'Engellendi' söylemek ister misiniz? Ben sadece hangi sütunun BlockedFriends – Veljko89

cevap

0

nasıl KullanıcıKimliği 1 Engellenen bilebilirim, bu

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

Hata alıyorum: Column tbl_Friends.SenderId select listesinde bir toplama işlevi veya grupta yer almadığı için geçersizdir.Solumn tbl_Friends.ReciverId select listesinde geçersiz çünkü bir toplu işlevde veya gruptaki tümcede yer almaz. Sütun tbl_Registrations.Id seçim listesinde geçersizdir, çünkü bir toplama işlevinde veya grupta yan tümce bulunmaz. @ Abdul Rasheed – Ritz

İlgili konular