En iyi yanıtlayıcılar
İç İçe Select Sorgusu "Yardım"

Soru
-
Merhaba
Merhaba veritabanımda 3 tane birbiri ile ilişkili tablom var.
Haberler Tablosu, Users Tablosu, Rol Tablosu.Haberler Tablosunun UserID alanı ile > Users tablosunun UserID alanı ilişkiki
Users tablosunun UserID alanı ile > Rol tablosunun UserdID alanı ilişkili
Senaryom şöyle;
A,B,C rollerinde X,Y,Z,X1,Y1,Z2 kullanıcıları var
X,Y,Z kullanıcıları A rolünde
X1,Y1,Z1 kullanıcıları B rolündeBen butona tıkladığımda A rolündeki kullanıcıların eklediği haberleri görmek istiyorum.
Şu şekilde RolId yi elde ediyorum
Select RoleId from aspnet_UsersInRoles where UserId in ( Select UserID FROM Haberler where AktifMi='true')
aldığım sonuç ise CD5CD90D-DAC9-4931-BC46-5459874F54CC şöyle bir RolID döndürüyor geri . Çıkamadm burdan :)
Yardımlarınız için şimdiden teşekkürler...
Yanıtlar
-
Select u.KullaniciAdi, h.* from Haberler h inner join Users u on h.UserId = u.UserId inner join aspnet_UsersInRoles r on u.UserId = r.UserId where h.Aktifmi = 1 and r.RolAdi = 'A'
aspnet_UsersInRole bana bu kodun aslinda C#, VB.Net .. .'den cagiriacagini dusunduruyor. Eger gercekten oyleyse Linq kullanmak daha kolay:
var haberler = from u in db.Users where u.Aktifmi && u.Roles.Any( r.RoleAdi = "A") select u.Haberler; // ya da var haberler = db.Users .Where( u => u.Aktifmi && u.Roles.Any( r => r.RoleAdi == "A" ) ) .Select( u => u.Haberler);
- Yanıt Olarak İşaretleyen Ali Rıza İnceoğlu 2 Eylül 2013 Pazartesi 16:34
Tüm Yanıtlar
-
Neden öyle yaptın ki?Hem ID görmen normal zaten.RoleID koymuşsun ama haberler tablosunda olan RolID leri getir demişsin :)
SELECT Haberler FROM Haberler AS H
INNER JOIN Rol AS R ON R.RolID=H.UserID
INNER JOIN Users AS U on U.UserID=r.UserID
WHERE R.UserID=2
Bunu kendine göre uyarla çalışır hata vermemesi lazım. -
Select u.KullaniciAdi, h.* from Haberler h inner join Users u on h.UserId = u.UserId inner join aspnet_UsersInRoles r on u.UserId = r.UserId where h.Aktifmi = 1 and r.RolAdi = 'A'
aspnet_UsersInRole bana bu kodun aslinda C#, VB.Net .. .'den cagiriacagini dusunduruyor. Eger gercekten oyleyse Linq kullanmak daha kolay:
var haberler = from u in db.Users where u.Aktifmi && u.Roles.Any( r.RoleAdi = "A") select u.Haberler; // ya da var haberler = db.Users .Where( u => u.Aktifmi && u.Roles.Any( r => r.RoleAdi == "A" ) ) .Select( u => u.Haberler);
- Yanıt Olarak İşaretleyen Ali Rıza İnceoğlu 2 Eylül 2013 Pazartesi 16:34
-