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.

InformationsquelleAutor Wh1T3h4Ck5 | 2012-06-15
Schreibe einen Kommentar