Best moeilijk om dit in de titel te omschrijven zo kort..
Ik heb moeite met een *lastige* (voor mij dan) query in MySQL. Het zit zo.
Ik heb de volgende tabellen:
Het idee is dus het volgende:
Een query die selecteerd aan de hand van een userId (users.id) welke permissions (alle matchende records uit die tabel gewoon selecteren) die heeft, waarbij deze aan elkaar worden gekoppeld door de tabellen PermissionToGroup en PermissionToUser. Welke groep nodig is kan aan de hand van het userId dat in de query wordt opgegeven uit de tabel users worden gehaald en gebruikt worden om gegevens uit de tabel PermissionsToGroup te trekken. Permissions die specifiek aan de user zijn toegewezen overschijven die aan de group waartoe de user behoort zijn toegewezen. Ik wil dus in m'n resultaten van alle records het id en name waarvan permissionToGroup.mode = allow en permissionToUser.mode = allow (of niet aanwezig) of permissionToGroup.mode = deny (of niet aanwezig) en permissionToUser = allow. PermissionToUser.mode = deny is standaard record wegfilteren. PermissionToUser overschijft dus (wanneer aanwezig) permissionToGroup.
Nou kan ik aardig leuke queries maken voor mijn doen, maar JOIN wil er bij mij nog niet in. Iedere keer als ik wat probeer met een leuke (LEFT/RIGHT/INNER/OUTER/...) JOIN dan gaat het fout.
Een tip wat ik het beste kan doen qua constructie hiervan kan mij eventueel al op weg helpen (ik wil er ook best zelf wat voor nadenken, heb ik al gedaan, maar goed, you get what I mean). Een voorbeeld zou ook mooi zijn, iemand anders moet al ooit met zo'n zelfde constructie hebben gezeten dus een voorbeeld zal er vast ook wel zijn.
Thnx.
Ik heb moeite met een *lastige* (voor mij dan) query in MySQL. Het zit zo.
Ik heb de volgende tabellen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| + Users - id - name - group ... + Groups - id - name ... + Permissions - id - name ... + PermissionToGroup - id - groupId - permissionId - mode (enum allow/deny) + PermissionToUser - id - userId - permissionId - mode (enum allow/deny) |
Het idee is dus het volgende:
Een query die selecteerd aan de hand van een userId (users.id) welke permissions (alle matchende records uit die tabel gewoon selecteren) die heeft, waarbij deze aan elkaar worden gekoppeld door de tabellen PermissionToGroup en PermissionToUser. Welke groep nodig is kan aan de hand van het userId dat in de query wordt opgegeven uit de tabel users worden gehaald en gebruikt worden om gegevens uit de tabel PermissionsToGroup te trekken. Permissions die specifiek aan de user zijn toegewezen overschijven die aan de group waartoe de user behoort zijn toegewezen. Ik wil dus in m'n resultaten van alle records het id en name waarvan permissionToGroup.mode = allow en permissionToUser.mode = allow (of niet aanwezig) of permissionToGroup.mode = deny (of niet aanwezig) en permissionToUser = allow. PermissionToUser.mode = deny is standaard record wegfilteren. PermissionToUser overschijft dus (wanneer aanwezig) permissionToGroup.
Nou kan ik aardig leuke queries maken voor mijn doen, maar JOIN wil er bij mij nog niet in. Iedere keer als ik wat probeer met een leuke (LEFT/RIGHT/INNER/OUTER/...) JOIN dan gaat het fout.
Een tip wat ik het beste kan doen qua constructie hiervan kan mij eventueel al op weg helpen (ik wil er ook best zelf wat voor nadenken, heb ik al gedaan, maar goed, you get what I mean). Een voorbeeld zou ook mooi zijn, iemand anders moet al ooit met zo'n zelfde constructie hebben gezeten dus een voorbeeld zal er vast ook wel zijn.
Thnx.