Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- English version: http://pastebin.com/8JuW6Fzw
- MySQL le tudja kezelni a hexa számokat. Tehát 0x0020 == 32 == b0100000;
- Azért tároljuk hexában a flageket, mert úgy könnnyebb beírni és átlátni őket. Valójában ezek bináris számok.
- Elmélet:
- ^^^^^^^
- Unió képzés: |
- 0100 (4)
- 0010 (2)
- -----------
- | 0110 (6)
- Metszet képzés: &
- 0110 (6)
- 0010 (2)
- -----------
- & 0010 (2)
- Kivonás = negálttal való metszet képzés
- 0110 (6)
- 0010 (2)
- .........
- 0110 (6)
- 1101 (~2)
- -----------
- &~0100 (4)
- Számolási példák:
- ^^^^^^^^^^^^^^^^
- Lekérdezés:
- SELECT 33 & 0x0020; # be van allitva? -> Igen 32
- SELECT 12 & 0x0020; # be van allitva? -> Nem 0
- Beállítás:
- SELECT (33 | 0x0020); # -> 33
- SELECT (10 | 0x0020); # -> 42
- Törlés:
- SELECT (33 & ~ 0x0020); # -> 1
- Toggle:
- SELECT (33 ^ 0x0020); # -> 1
- SELECT ((33 ^ 0x0020) ^ 0x0020); # -> 33
- Adatbázis példák:
- ^^^^^^^^^^^^^^^^
- [ Lekérdezés ]
- Ahol be van állítva:
- SELECT * FROM table WHERE flags & 0x0020 = 0x0020 ; # ez szép
- SELECT * FROM table WHERE (flags & 0x0020); # ez egyszerű
- Ahol nincs beállítva:
- SELECT * FROM table WHERE flags & 0x0020 = 0; # ez szép
- SELECT * FROM table WHERE !(flags & 0x0020); # ez egyszerű
- [ Beállítás ]
- UPDATE table SET flags = flags | 0x0020;
- [ Törlés ]
- UPDATE table SET flags = flags & ~0x0020;
- [ Toggle (átkapcsolás) ]
- UPDATE table SET flags = flags ^ 0x0020;
- [ Több flag egyszerre történő lekérdezése ]
- Kérdezzük le a usereket privilégiumaik szerint, ahol:
- PRIV_ADMIN = 0x001;
- PRIV_LEARNER = 0x008;
- A user admin és learner egyszerre:
- SELECT * FROM users WHERE priv & (8 | 1) = (8 | 1);
- A user learner vagy admin (vagy mindkettő):
- SELECT * FROM users WHERE priv & (8 | 1) > 0
- SELECT * FROM users WHERE (priv & (8 | 1));
- A user sem nem learner, sem nem admin:
- SELECT * FROM users WHERE priv & (8 | 1) = 0;
- SELECT * FROM users WHERE !(priv & (8 | 1));
- [ Több flag egyszerre történő beállítása ]
- Legyen learner és admin is!
- UPDATE users SET priv = priv | (8 | 1);
- [ Több flag egyszerre történő törlése ]
- Ne legyen se admin, se learner!
- UPDATE users SET priv = priv & ~(8 | 1);
- [ Beállítás és törlés egyszerre ]
- Legyen admin, de ne legyen learner!
- UPDATE users SET priv = (priv | 1) & ~8;
- UPDATE users SET priv = (priv & ~8) | 1;
Advertisement
Add Comment
Please, Sign In to add comment