您需要SET data type。 SET 或多或少是一个bit field,其中每个位都有一个名称:
ALTER TABLE user ADD COLUMN permissions SET(
'States',
'Cities',
'Africa',
'Asia',
'Australia',
'Europe',
...
);
选择可以查看亚洲数据的用户:
SELECT * FROM user WHERE FIND_IN_SET('Asia',permissions) > 0;
或者选择所有可以查看亚洲和欧洲但不能查看非洲的用户:
SELECT * FROM user WHERE permissions & 40 = 40 AND !(permissions & 4)
我会在 PHP 中进一步定义这些常量,那么你的代码应该非常可读:
define('PERMISSION_STATES', 1);
define('PERMISSION_CITIES', 2);
define('PERMISSION_AFRICA', 4);
define('PERMISSION_ASIA', 8);
define('PERMISSION_AUSTRALIA', 16);
define('PERMISSION_EUROPE', 32);
# ...
# Check if user can view data for Africa
if ($user['permissions'] & PERMISSION_AFRICA) {
# ...
# Check if user can Asia and Europe but not Africa
if ($user['permissions'] & PERMISSION_ASIA
&& $user['permissions'] & PERMISSION_EUROPE
&& !($user['permissions'] & PERMISSION_AFRICA)) {
# ...