Voor een website die ik beheer ben ik bezig een nieuw rechtensysteem te ontwerpen. In dit rechtensysteem worden alle rechten per persoon in een enkel int(
opgeslagen. Elke toegangsflag heeft dan zijn eigen flag. Tot zover alles prima, ik wil echter ook de mogelijkheid geven om iemand met een simpele query alle mogelijke rechten te geven. Hiervoor kom ik uit op de BIT_OR functie van MySQL:
Echter, bij mij doet deze functie eigenlijk wat MAX hoort te doen. Een voorbeeld:BIT_OR(expr)
Returns the bitwise OR of all bits in expr. The calculation is performed with 64-bit (BIGINT) precision.
This function returns 0 if there were no matching rows.
SQL:
Als ik het goed uitgerekend heb, zou de uitkomst 32767 moeten zijn. Het zou in ieder geval geen vijftien moeten zijn. Wat doe ik fout?
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
28
29
| mysql> SELECT mPid FROM mProject; +------+ | mPid | +------+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | | 11 | | 12 | | 13 | | 14 | | 15 | +------+ 15 rows in set (0.00 sec) mysql> SELECT BIT_OR(2 ^ (mPid - 1)) FROM mProject; +------------------------+ | BIT_OR(2 ^ (mPid - 1)) | +------------------------+ | 15 | +------------------------+ 1 row in set (0.01 sec) |
Ik ontken het bestaan van IE.