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
Vous devez vous connecter pour publier un commentaire.
Mal. Vous souhaitez sélectionner certains Lignes. Les colonnes sont généralement appelées champs.
Vous êtes censé lire la Documentation: Peu De Fonctions sont documentés pour mysql.
De sorte que vous pouvez essayer:
Select * from users WHERE (user_privileges & 1) >0
OriginalL'auteur Turbo J
<level>
étant le niveau d'accès que vous souhaitez rechercher (par exemple, 1, 5, 9, 130, etc.)Hmm... je ne suis pas sûr si je comprends pleinement. J'ai peut-être raté quelque chose complètement que je suis plutôt nouvelle pour bit-à-bit, mais ma requête sélectionne tous les lignes en fonction de la Fpo exemple... que suis-je donc pas?
00000001 est égal à
00000001
. C'est un bit à bit et, ainsi, pour chaque bitpair où les deux sont1
, vous obtenez1
dos. C'est un bit à bitAND
. voir, par exemple, cette calculatriceOriginalL'auteur Zane Bien