Avatar billede hrc Mester
15. oktober 2012 - 12:59 Der er 5 kommentarer og
1 løsning

Sammentælling af rettigheder i script

Programmet har nogle rettigheder tilknyttet en gruppe. En bruger kan være tilknyttet flere grupper så jeg står med flere records hvor jeg skal summere rettighederne:

tabel bruger_gruppe_rel:
brugerID gruppeID
1        5
1        6

tabel gruppe
ID  opret  slet
5  0      1
6  1      0

det ønskede resultat er

brugerID  opret  slet
1        1      1

Felterne "opret" og "slet" er af typen bit og default 0. Hidtil har jeg klaret summeringen på klientsiden, men nu skal det ud i databasen da andre skal bruge det også. Jeg vil helst undgå en SQL-funktion med en cursor der løber resultatet igennem. Det er besværligt og virker ikke som den rette løsning.

Har nogen et bud på en effektiv select som klarer summeringen?

Et lille spørgsmål mere: Prøvede undervejs at lave følgende: set @opret = @opret or @current_opret, men det kan databasen ikke li' Er der en rigtig syntaks?
Avatar billede runesoft Nybegynder
15. oktober 2012 - 13:05 #1
Løsningen er at du laver en join og derefter en gruppering.
Avatar billede runesoft Nybegynder
15. oktober 2012 - 13:07 #2
select brugerid, max(opret), max(slet) from bruger_gruppe_rel inner join gruppe on ID = gruppeID
Avatar billede runesoft Nybegynder
15. oktober 2012 - 13:08 #3
og evt. noget gruppering tilsidst.
Avatar billede hrc Mester
15. oktober 2012 - 14:13 #4
Citat: Operand data type bit is invalid for max operator. Typecasting klarede den del idet false castes korrekt til 0 og true til 1. Du får points for svaret er korrekt men mine kvaler er ikke løste idet jeg henter andre ting ud i klient-scriptet:

select bgr.ID
      ,bgr.gruppeID <-- hermed virker grupperingsideen ikke.
      ..

I klientprogrammet gemmer jeg summen af rettighederne i et objekt, hvor jeg inkonsekvent også gemmer de grupper vedkommende bruger er medlem af. Det er en forkert vej og skal laves så jeg har en liste af gruppe-objekter incl. rettigheder. Først når jeg spørger på rettighederne skal jeg foretage summeringen. Lidt flere loops, men den korrekte løsning.

Når dette er lavet så bliver scriptet ret simpelt og uden grupperinger og den slags.
Avatar billede runesoft Nybegynder
15. oktober 2012 - 14:46 #5
Jeg kan ikke helt gennemskue hvad det er du prøver at forklare. Men det lyder forkert at du skal bruge loops.
Avatar billede hrc Mester
16. oktober 2012 - 09:33 #6
Det er egentlig heller ikke relevant for spørgsmålet her, men tak for interessen :-) Jeg har brug for begge dele, de sumerede rettigheder og ID på hvert af grupperne. Tidligere har jeg haft to variable, indeholdende rettighederne, samt en liste af gruppeID. Logisk set er det forkert. De to ting hører sammen og nu summerer jeg on-the-fly. Ulempen er, at jeg skal gennemløbe liste på 5-6 objekter hver gang jeg tester rettigheder - men det gør jeg kun én gang (hver gang dialogen skal bruges). Det er meget pænere kodet og foregår kun i CPU'en.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester