WÄHLEN Sie die Benutzer aus der MySQL-Datenbank von Privilegien Bitmaske?
Habe ich die Benutzer-Tabelle und wollen, WÄHLEN Sie einige Zeilen von Bitmaske Kriterien. Ich werde versuchen zu erklären mein problem mit dem kleinen Beispiel.
Struktur der Tabelle Benutzer
user_id int [primary key, auto_increment]
user_email varchar(200)
user_privileges int
Hinweis: Es hat mehr Felder, aber Sie sind irrelevant für diese Frage.
Gefüllte Tabelle kann wie folgt Aussehen
+---------+--------------------+-----------------+
| user_id | user_email | user_privileges | << binary
+---------+--------------------+-----------------+
| 1 | john@example.com | 165 | 10100101
| 2 | max@example.com | 13 | 00001101
| 3 | trevor@example.com | 33 | 00100001
| 4 | paul@example.com | 8 | 00001000
| 5 | rashid@example.com | 5 | 00000101
+---------+--------------------+-----------------+
Nun will ich Sie auf Benutzer AUSWÄHLEN, indem Sie bestimmte Privilegien Bitmaske (von user_privileges
Spalte).
Beispiel:
- Bitmaske=1 [00000001] wählen Sie Benutzer-ids 1, 2, 3 und 5
- Bitmaske=9 [00001001] wählen Sie Benutzer-id 2 nur
- Bitmaske=5 [00000101] wählen Sie Benutzer-ids 1, 2 und 5
- Bitmaske=130 [10000010] auswählen würde keine
Meine Frage: Ist es möglich aus der Abfrage, oder ich habe zu gehen, die alle Benutzer ein-von-ein und überprüfen Sie diesen Wert aus PHP-code? Auch ist es möglich, wenn Feld user_privileges ist text
mit hexadezimalen zahlen, anstatt der zahlen? Ich muss arbeiten, mysql-query-Beispiel.
Hinweis: Dies ist nur ein einfaches Beispiel mit 8-bit-Privileg-set. In der realen Umgebung, können größere Mengen (größer Ganzzahlen, mehr bytes). Erstellen separate Spalte für jedes Privileg Zustand, funktioniert einwandfrei, aber das ist nicht möglich Lösung. Ich würde lieber arbeiten mit hex-Werte, aber die ganzen zahlen sind auch in Ordnung, etwas ist besser als nichts.
Danke im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Falsch. Sie wollen wählen Zeilen. Spalten sind in der Regel als Felder.
Sollen Sie die Dokumentation zu Lesen: Bit-Funktionen dokumentiert für mysql.
So können Sie versuchen:
Select * from users WHERE (user_privileges & 1) >0
<level>
wird die Zugriffsebene aus, die Sie suchen möchten (z.B. 1, 5, 9, 130, usw.)00000001
. Es ist eine bitweise und-Verknüpfung, so wird für jeden bitpair wo die beiden sind1
erhalten Sie1
zurück. Es ist eine bitweiseAND
. siehe z.B. dieser Rechner