none
İç İçe Select Sorgusu "Yardım" RRS feed

  • 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ünde

    Ben 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...



    24 Ağustos 2013 Cumartesi 01:13

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);
    

    30 Ağustos 2013 Cuma 10:00

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.
    30 Ağustos 2013 Cuma 08:53
  • 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);
    

    30 Ağustos 2013 Cuma 10:00
  • Bu SQL hata verir :) Iyi ki de verir cunku sorunun mantigina uymamis, sonuc hatali olacakti. Hem UserId'yi bilse Rol'e ne gerek var.

    30 Ağustos 2013 Cuma 10:03