SÉLECTIONNEZ les utilisateurs de base de données MySQL par les privilèges de masque de bits?

J'ai de table des utilisateurs et souhaitez SÉLECTIONNER certaines lignes masque de bits par critères. Je vais essayer d'expliquer mon problème avec un petit exemple.

Structure de la table utilisateurs

user_id             int           [primary key, auto_increment]
user_email          varchar(200)    
user_privileges     int

Remarque: Il a plus de champs, mais ils ne sont pas pertinents pour cette question.

Rempli le tableau peut ressembler à ceci

+---------+--------------------+-----------------+
| 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
+---------+--------------------+-----------------+

Maintenant, je veux SÉLECTIONNER des utilisateurs spécifiques privilèges masque de bits (par user_privileges colonne).

Par exemple:

  • masque de bits=1 [00000001] sélectionnez utilisateur-id 1, 2, 3 et 5
  • masque de bits=9 [00001001] sélectionnez utilisateur-id 2 seulement
  • masque de bits=5 [00000101] sélectionnez utilisateur-id 1, 2 et 5
  • masque de bits=130 [10000010] sélectionnez aucun

Ma question: Est-il possible à partir d'une requête ou je dois aller tous les utilisateurs un par un et vérifier cette valeur à partir du code PHP? Aussi, est-il possible si le champ user_privileges est text, contenant des nombres hexadécimaux, au lieu d'entiers? J'ai besoin de travail de requête mysql exemple.

Remarque: C'est juste un exemple simple avec 8 bits privilège. Dans l'environnement réel, il peut avoir de plus grands ensembles (plus entiers, plus d'octets). La création de colonne séparée pour chaque privilège de l'état fonctionne très bien, mais ce n'est pas possible solution. Je préfère travailler avec des valeurs hexadécimales, mais entiers sont bien aussi, quelque chose est mieux que rien.

Merci à l'avance.

OriginalL'auteur Wh1T3h4Ck5 | 2012-06-15