Toon posts:

[ASP] Select probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met het volgende probleem. Ik ben van plan een rechtensysteem voor ons buurt netwerk op te zetten. (+/- 15 gebruikers) Nu wil ik alle ingestelde rechten gaan bijhouden in een database. Dat is tot zover nog geen enkel probleem.

Ik heb een admin pagina gemaakt waarin ik kan zien wie welke rechten over welke map heeft. Hier kan ik ook gebruikers rechten geven of nemen. Nu zou ik echter graag een lijstje willen hebben met de mensen die nog geen rechten voor die map hebben. (zodat ik alleen maar 1 knop hoef in te drukken) En dat lukt dus totaal niet.

Mijn database (Access) bestaat uit meerdere tabellen, de voor deze klus benodigde tabellen zijn Rechten en Users. De rechten tabel is als volgt opgebouwd, voor elke map komt er een record in, in deze record staat ook de userID van de bestreffende gebruiker, de naam van deze gebruiker kan dan weer uit de tabel Users gevist worden.

Voorbeeld: (dus 3 gebruikers hebben rechten voor deze map)
Map 13 User 1 User 1 = Piet
Map 13 User 3 User 3 = Paard
Map 13 User 5 User 5 = Sint

Ik zou dus graag een lijstje willen hebben waar nu user 2 en user 4 in komen te staan omdat ze nog geen rechten hebben. Een oplossing die ik wel werkend zou kunnen krijgen zou zijn om een Query te openen met daarin weer een Query die checkt of de gebruiker er al in zit. Dit is echter wat omslachtig en volgens mij ook niet de snelste manier. (jah, met 15 gebruikers zal snelheid wel geen probleem zijn, maar ik ben nog aan het leren en zou het daarom zo net mogelijk willen doen, voor in de toekomst :))

Ik had de volgende Querys al geprobeerd:
code:
1
2
SQL = "SELECT Rechten.User, Users.ID, Users.Naam FROM Users LEFT JOIN 
Rechten ON Rechten.User = Users.ID"

Resultaat is dat hij wel goed kijkt en ook de goede users eruit vist, in combinatie met een klein stukje IF THEN code. Maar het probleem is dat hij het ID van de map niet bekijkt, zodat ik voor alle mappen hetzelfde resultaat krijg.

Dit probeerde ik te voorkomen door de sting wat aan te passen:
code:
1
2
3
SQL = "SELECT Rechten.User, Users.ID, Users.Naam FROM Users LEFT JOIN 
Rechten ON Rechten.User = Users.ID WHERE
Rechten.Map LIKE '%" & ID & "%'"

Nu krijg ik te zien wie er wel rechten hebben, nu dacht ik dus dat ik er mooi een NOT in zet en dan de selectie zou kunnen omdraaien, maar dat mocht ook niet baten.

Een andere variant die ik bedacht had was:
code:
1
2
SQL = "SELECT * FROM Users, Rechten WHERE 
Rechten.User NOT LIKE Users.ID"

Dit werkt tot op zekere hoogte, ik krijg namelijk alle gebruikers te zien x het aantal records = 5 x 3 = 15, min 1 x de users met de rechten = 15 – 3 = 12. Dus het goede resultaat is er nog niet.

Ik vroeg me dus af of iemand een nette oplossing heeft voor mijn probleem, zodat ik dit voor in vervolg weet.

(p.s. uiterraard heb ik zelf ook gezocht, het hele weekend al :( maar ik kon echt niets meer vinden, en ook heb ik nog heel wat varianten geprobeerd op mijn query's maar die zijn denk ik zo fout als maar wat, alleen het idee al :P )

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Als Access minus ondersteud (ik denk het wel):
code:
1
2
3
4
5
6
select users.id
from   users
minus
select rechten.user
from   rechten
where  rechten.map=[param]

[ Voor 3% gewijzigd door justmental op 13-07-2003 18:42 ]

Who is John Galt?


Verwijderd

Topicstarter
justmental schreef op 13 July 2003 @ 18:42:
Als Access minus ondersteud (ik denk het wel):
code:
1
2
3
4
5
6
select users.id
from   users
minus
select rechten.user
from   rechten
where  rechten.map=[param]
Deze krijg ik niet aan de praat, naar enig zoeken kwam ik erachter dat Access/MSSQL dit helaas niet ondersteunen, Oracle daarentegen weer wel. Maar in ieder geval bedankt.

[ Voor 5% gewijzigd door Verwijderd op 13-07-2003 22:58 ]


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Het is me niet helemaal duidelijk wat je nu terug wil krijgen uit je query, alle gebruikers zonder rechten of de gebruikers die geen rechten hebben op een specifieke map.

De simpelste oplossingen lijken mij:

1. Alle gebruikers die niet voorkomen in de Rechten tabel

SQL:
1
2
3
4
5
SELECT u.*
FROM Users u
LEFT OUTER JOIN Rechten r
ON u.ID = r.User 
WHERE r.User IS NULL


2. Gebruikers zonder rechten op een specifieke map

SQL:
1
2
3
4
5
6
7
SELECT *
FROM Users
WHERE ID NOT IN (
  SELECT u.ID
  FROM Users u, Rechten r 
  WHERE u.ID = r.User AND r.Map = [param]
)

Today's subliminal thought is:


Verwijderd

Topicstarter
Annie schreef op 13 July 2003 @ 23:13:
Het is me niet helemaal duidelijk wat je nu terug wil krijgen uit je query, alle gebruikers zonder rechten of de gebruikers die geen rechten hebben op een specifieke map.
Het 2de zou ik graag willen hebben. En je 2de oplossing werkt PERFECT, hartelijk dank hiervoor. _/-\o_