Vous devez utiliser un binaire ET pour voir si le bit est défini. vous pouvez également utiliser un champ ensemble. c'est aussi un bitfield avec nommer chaque bit.
ET comme ceci:
WHERE (access_level & 15);
échantillon - create table et remplir
mysql> CREATE TABLE `access_table` (
-> `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
-> `item_text` VARCHAR(32) DEFAULT NULL,
-> `url` VARCHAR(32) DEFAULT NULL,
-> `access_level` SET('home','help','backend','admin') DEFAULT NULL,
-> PRIMARY KEY (`id`)
->) ENGINE=INNODB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0,02 sec)
mysql>
mysql> INSERT INTO `access_table` (`id`, `item_text`, `url`, `access_level`)
-> VALUES
-> (1, 'home', '/home', 'home'),
-> (2, 'help', '/help', 'help'),
-> (3, 'backend', '/backend', 'backend'),
-> (4, 'hoadmpage', '/admin', 'admin');
Query OK, 4 rows affected (0,00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql>
échantillon - afficher toutes les lignes et sélectionnez une par les bits
mysql> SELECT *,access_level+0 FROM ACCESS_TABLE;
+----+-----------+----------+--------------+----------------+
| id | item_text | url | access_level | access_level+0 |
+----+-----------+----------+--------------+----------------+
| 1 | home | /home | home | 1 |
| 2 | help | /help | help | 2 |
| 3 | backend | /backend | backend | 4 |
| 4 | hoadmpage | /admin | admin | 8 |
+----+-----------+----------+--------------+----------------+
4 rows in set (0,00 sec)
mysql>
mysql> SELECT *,access_level+0
-> FROM ACCESS_TABLE
-> WHERE (access_level & 15);
+----+-----------+----------+--------------+----------------+
| id | item_text | url | access_level | access_level+0 |
+----+-----------+----------+--------------+----------------+
| 1 | home | /home | home | 1 |
| 2 | help | /help | help | 2 |
| 3 | backend | /backend | backend | 4 |
| 4 | hoadmpage | /admin | admin | 8 |
+----+-----------+----------+--------------+----------------+
4 rows in set (0,00 sec)
mysql> SELECT *,access_level+0
-> FROM ACCESS_TABLE
-> WHERE (access_level & 7);
+----+-----------+----------+--------------+----------------+
| id | item_text | url | access_level | access_level+0 |
+----+-----------+----------+--------------+----------------+
| 1 | home | /home | home | 1 |
| 2 | help | /help | help | 2 |
| 3 | backend | /backend | backend | 4 |
+----+-----------+----------+--------------+----------------+
3 rows in set (0,00 sec)
mysql> SELECT *,access_level+0
-> FROM ACCESS_TABLE
-> WHERE (access_level & 9);
+----+-----------+--------+--------------+----------------+
| id | item_text | url | access_level | access_level+0 |
+----+-----------+--------+--------------+----------------+
| 1 | home | /home | home | 1 |
| 4 | hoadmpage | /admin | admin | 8 |
+----+-----------+--------+--------------+----------------+
2 rows in set (0,00 sec)
mysql>
mai i demander pourquoi cette approche? – PhpDude