Ik ben al een tijd bezig een query op te zetten (ook met behulp van google). Deze query moet een tweetal gegevens ophalen, namelijk een 'permKey'(string) en een 'value' (true/false). Dit moet echter gebeuren uit een aantal verschillende database tables.
Ik heb de volgende tabelen:
permissions |
---|
ID | int |
permKey | string |
user_perms |
---|
ID | int |
userID | int |
permID | int |
value | bool |
role_perms |
---|
ID | int |
roleID | int |
permID | int |
value | bool |
user_roles |
---|
roleID | int |
userID | int |
Ik wil dus de permKey en de value uit de tabelen, `permissions`, `user_perms` en `role_perms` hebben. waarbij de tabel `user_perms` de overwinnende is. Dat wil zeggen dat als er 2 permKey entry's zijn de gene van de user_perms wint en zijn waarde wordt gebruikt.
tot nu toe heb ik de volgende query:
SQL:
1
2
3
4
5
6
7
8
9
| SELECT `permissions`.`permKey`, (`role_perms`.`value` & `user_perms`.`value`) as `value`
FROM `role_perms`
JOIN `permissions`
ON (`permissions`.`ID` = `role_perms`.`permID`)
JOIN user_roles
ON (`user_roles`.`roleID` = `role_perms`.`roleID`)
JOIN user_perms
ON (`user_perms`.`permID` = `permissions`.`ID`)
WHERE `user_roles`.`userID` = `1` |
Deze query geeft maar 1 rij terug, namelijk als de `permID` in `role_perms` en in `user_perms` voorkomt. terwijl ik alle `permKey` wil hebben.
(`userID` is gewoon gekozen.. die moet variabel worden.)