"MKJ" <m@ds.dk> skrev i en meddelelse 
news:4795d557$0$2086$edfadb0f@dtext02.news.tele.dk...
> Hej
>
> Jeg har problemer med performance på en søgning.
> Systemet der søges i er et arkivsystem der består af X antal sager der 
> hver kan indeholde X antal emner.
> Problemet er ikke selve søgningen men et check der skal laves for at finde 
> ud af om brugeren har rettigheder til et emne.
>
> Der er 2 forskellige måder en bruger kan få rettigheder til et emne:
> 1) Der er ikke angivet en adgangsgruppe på selve emnet.
> 2) Der er angivet en eller flere adgangsgrupper på emnet som brugeren er 
> medlem af.
>
> Pt. bruger jeg en sql funktion til at finde ud af om brugeren har de 
> nødvendige rettigheder så nu ligner søgningen noget i retning af:
>
> "SELECT * FROM Documents WHERE Description LIKE '%søgeord%' AND 
> DBO.func_CanGetItem(Documents.DocumentId, @UserId) = 1"
>
> Rettighederne er angivet i en simpel tabel der bla. indeholder ItemId, 
> GroupId derudover er der en Users tabel en Groups tabel samt en 
> GroupsUsers tabel.
> Der er ingen tvivl om at det er funktionskaldet der tager lang tid og det 
> der skal fjernes jeg ved bare ikke hvordan man flytter det samme check til 
> sin select.
>
> --
> MKJ
>
Hvis vi forestiller os 2 tabeller:
tblEmner
ID      Emne
1        Emne 1
2        Emne 2
3        Emne 3
tblRettighed
ID      EmneID    SikkerhedsID
1        1                24
2        1                18
3        1                2
4        2                24
5        2                18
6        3                2
SikkerhedsID kan være både brugerid og gruppe id!
Du har en bruger der har sikkerhedsID'erne (2, 15, 97) og vil vide om han 
har rettighed til EmneID 2
Nu må du ikke holde mig op på syntaxen (specielt på det med IN), men noget i 
stil med....
SELECT DISTINCT e.Emne FROM tblEmne as e, tblRettighed as r WHERE e.ID = 2 
AND e.ID = r.EmneID AND r.SikkerhedsID IN (2, 15, 97)
-- 
Mvh
Nygaard
www.nygaard.eu